【发布时间】:2019-04-02 22:03:20
【问题描述】:
我是 Java 中的 GUI 新手(我猜是一般的编码),所以我很困惑为什么我的 JPanel 上的 JButton 仅在我初始化并添加 JButton 时才显示在具有 JFrame 的类上。我要做的是在 JPanel 上创建一个带有 JBUttons 和 GridLayout 的电话键盘。
如果我在其中包含 JFrame 的类上初始化并将 JButton 添加到 JPanel。我无法在扩展 JPanel 的类中将 JButton 添加到 JPanel,然后将 JPanel 对象添加到 JFrame。
这行得通:
public static void main (String[] argv){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBackground(Color.gray);
DialPanel keypad = new DialPanel();
panel.setLayout(new GridLayout(3, 3));
JButton one = new JButton("1");
JButton two = new JButton("2");
JButton three = new JButton("3");
JButton four = new JButton("4");
JButton five = new JButton("5");
JButton six = new JButton("6");
JButton seven = new JButton("7");
JButton eight = new JButton("8");
JButton nine = new JButton("9");
keypad.add(one);
keypad.add(two);
keypad.add(three);
keypad.add(four);
keypad.add(five);
keypad.add(six);
keypad.add(seven);
keypad.add(eight);
keypad.add(nine);
frame.getContentPane().add(keypad);
keypad.setVisible(true);
frame.pack();
frame.setVisible(true);
}
和
public class DialPanel extends JPanel {
DialPanel(){
JPanel panel = new JPanel();
}
}
但这不起作用,我不知道为什么:
public static void main (String[] argv){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBackground(Color.gray);
DialPanel keypad = new DialPanel();
frame.getContentPane().add(keypad);
keypad.setVisible(true);
frame.pack();
frame.setVisible(true);
}
和
public class DialPanel extends JPanel {
DialPanel(){
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3, 3));
panel.setBackground(Color.gray);
JButton one = new JButton("1");
JButton two = new JButton("2");
JButton three = new JButton("3");
JButton four = new JButton("4");
JButton five = new JButton("5");
JButton six = new JButton("6");
JButton seven = new JButton("7");
JButton eight = new JButton("8");
JButton nine = new JButton("9");
panel.add(one);
panel.add(two);
panel.add(three);
panel.add(four);
panel.add(five);
panel.add(six);
panel.add(seven);
panel.add(eight);
panel.add(nine);
}
}
使用第二个选项,窗口只是空白,但在 main 方法中的所有内容都按预期工作。为什么构造函数中的按钮不能工作,我怎样才能让它工作(如果我能让它像那样工作的话)?
【问题讨论】: