我正在尝试学习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");
}
}
答案 0 :(得分:1)
好的,让我们开始...
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
版式
答案 1 :(得分:0)
creatFrame
正在创建一个与框架本身不同的新JFrame(您的Swing类扩展了JFrame)。
删除行:
JFrame f = new JFrame(title);
并通过this
而不是f
调用方法。