如何将按钮和canvas放入jframe? (Java 摆动)
How to put buttons and canvas into jframe? (Java swing)
我有一个 JFrame 以及一些按钮和文本字段。我正在使用绝对定位(空布局)。我尝试创建一个 canvas 来绘制,但是当我尝试将 canvas 添加到容器然后添加到框架中时,canvas 会覆盖所有按钮。我想让按钮旁边的 canvas 都可见。
这是我的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Gui extends JFrame {
private JLabel labEnterWord;
private JTextField tfWord;
private JButton butOk;
public Gui(String title) {
super(title);
JPanel p = new JPanel();
p.setLayout(null);
//Create components and add them to the container
addComponents(p);
//Add containers to window
getContentPane().add(p);
getContentPane().add(new MyCanvas());
setWindowProperties();
}
private void addComponents(JPanel p) {
labEnterWord = new JLabel("Enter your word:");
labEnterWord.setBounds(100, 60, 200, 30);
labEnterWord.setFont(new Font("Arial", Font.PLAIN, 20));
p.add(labEnterWord);
tfWord = new JTextField();
tfWord.setBounds(100, 100, 100, 25);
tfWord.setFont(new Font("Arial", Font.PLAIN, 14));
p.add(tfWord);
butOk = new JButton("OK");
butOk.setBounds(220, 100, 51, 25);
butOk.addActionListener(new Event());
p.add(butOk);
}
private void setWindowProperties(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setSize(1280, 720);
setResizable(false);
setLocationRelativeTo(null);
}
}
我的画布class:
import javax.swing.*;
import java.awt.*;
public class MyCanvas extends JPanel {
public void drawing(){
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(500, 200, 200, 200);
}
}
Main class 只是调用 Gui()。
这里:
getContentPane().add(p);
getContentPane().add(new MyCanvas());
第一个将带有按钮的面板添加到框架中。然后将 另一个 东西添加到框架中!
按照您手动放置所有内容的方法,您宁愿将 canvas 添加到 面板 !
您禁用了所有允许 JFrame 的方法。一个布局管理器,用于有意义地放置您的面板和 canvas。相反,您将 两个 元素推入框架,而没有告诉框架 canvas 应该去哪里!
所以您要么也需要 canvas 的绝对位置 - 或者您退后一步,求助于布局管理器来为您完成。
我有一个 JFrame 以及一些按钮和文本字段。我正在使用绝对定位(空布局)。我尝试创建一个 canvas 来绘制,但是当我尝试将 canvas 添加到容器然后添加到框架中时,canvas 会覆盖所有按钮。我想让按钮旁边的 canvas 都可见。
这是我的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Gui extends JFrame {
private JLabel labEnterWord;
private JTextField tfWord;
private JButton butOk;
public Gui(String title) {
super(title);
JPanel p = new JPanel();
p.setLayout(null);
//Create components and add them to the container
addComponents(p);
//Add containers to window
getContentPane().add(p);
getContentPane().add(new MyCanvas());
setWindowProperties();
}
private void addComponents(JPanel p) {
labEnterWord = new JLabel("Enter your word:");
labEnterWord.setBounds(100, 60, 200, 30);
labEnterWord.setFont(new Font("Arial", Font.PLAIN, 20));
p.add(labEnterWord);
tfWord = new JTextField();
tfWord.setBounds(100, 100, 100, 25);
tfWord.setFont(new Font("Arial", Font.PLAIN, 14));
p.add(tfWord);
butOk = new JButton("OK");
butOk.setBounds(220, 100, 51, 25);
butOk.addActionListener(new Event());
p.add(butOk);
}
private void setWindowProperties(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setSize(1280, 720);
setResizable(false);
setLocationRelativeTo(null);
}
}
我的画布class:
import javax.swing.*;
import java.awt.*;
public class MyCanvas extends JPanel {
public void drawing(){
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(500, 200, 200, 200);
}
}
Main class 只是调用 Gui()。
这里:
getContentPane().add(p);
getContentPane().add(new MyCanvas());
第一个将带有按钮的面板添加到框架中。然后将 另一个 东西添加到框架中!
按照您手动放置所有内容的方法,您宁愿将 canvas 添加到 面板 !
您禁用了所有允许 JFrame 的方法。一个布局管理器,用于有意义地放置您的面板和 canvas。相反,您将 两个 元素推入框架,而没有告诉框架 canvas 应该去哪里!
所以您要么也需要 canvas 的绝对位置 - 或者您退后一步,求助于布局管理器来为您完成。