[英]Java - Why doesn't my buttons show in the panel?
我正在尝试学习Java Swing
。 现在,我正在编写一个简单的程序,需要创建一个按钮。 我有两堂课:车手和挥杆。 我创建按钮并导入javax.swing.JButton
并添加了按钮。 最后,将按钮添加到面板上,但是Idk为什么我只得到面板? 有人可以帮我吗? 这是我的代码:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Swing extends JFrame {
private JFrame f;
private JButton button;
private JLabel label;
private JPanel panel;
public Swing() {
}
public Swing(String titleName) {
creatButton();
creatFrame(titleName);
}
public void creatButton() {
JButton btn = new JButton("click me");
JPanel panel = new JPanel();
panel.add(btn);
btn.setBounds(50, 100, 95, 30);
add(panel);
}
private void creatFrame(String title) {
JFrame f = new JFrame(title);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.setSize(400, 500);
f.setLayout(null);
}
}
public class Driver {
public static void main (String [] args) {
new Swing ("calculator");
}
}
好吧,让我们从...开始
JButton btn = new JButton("click me");
JPanel panel = new JPanel();
panel.add(btn);
btn.setBounds(50, 100, 95, 30);
add(panel);
您:
接着...
JFrame f = new JFrame("calculator");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new
f.setVisible(true);
您创建了一个全新的JFrame
实例并显示了它,但是它没有任何作用? 😱!
相反,您应避免从JFrame
扩展,而应改用JPanel
,类似...
public class Swing extends JPanel {
private JButton button;
private JLabel label;
public Swing() {
creatButton();
add(button);
}
public void creatButton() {
JButton btn = new JButton("click me");
}
}
然后,您可以创建一个窗口(或其他容器)并将其添加到其中
JFrame f = new JFrame(title);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new Swing());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
通常, JFrame
是一个非常差的扩展点,它是一个复杂的复合组件,将您锁定在单个用例中。 从JPanel
开始,通常是一个更好的主意,它为您提供了更大的灵活性和更少的复杂性,并且易于重用。
您确实非常需要避免使用null
布局
creatFrame
正在创建一个与框架本身不同的新JFrame(您的Swing类扩展了JFrame)。
删除行:
JFrame f = new JFrame(title);
并通过this
而不是f
调用方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.