[英]How come my JButtons ("search buttons") wont show up on the JPanel?
[英]Why is it that my JButtons do not show up when put in the constructor for the JPanel?
我是 Java GUI 的新手(我猜是用一般的编码),所以我很困惑为什么我的 JPanel 上的 JButton 只在我初始化并在具有 JFrame 的类上添加 JButton 时才会显示。 我想要做的是在 JPanel 上创建一个带有 JBUttons 和 GridLayout 的电话键盘。
如果我初始化 JButton 并将其添加到其中包含 JFrame 的类上的 JPanel。 我无法将 JButton 添加到扩展 JPanel 的类中的 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 方法中的所有内容都按预期工作。 为什么构造函数中的按钮不起作用,我怎样才能让它工作(如果我能让它像那样工作)?
您不需要在DialPanel
再创建一个JPanel
( DialPanel
构造函数中的第一行)。
DialPanel
已经通过类定义扩展了JPanel
:
public class DialPanel extends JPanel
因此,您将所有按钮添加到从未添加到任何其他容器的JPanel
。
您必须将所有按钮添加到DialPanel
本身。
正确的代码是:
public class DialPanel extends JPanel {
DialPanel(){
setLayout(new GridLayout(3, 3));
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");
add(one);
add(two);
add(three);
add(four);
add(five);
add(six);
add(seven);
add(eight);
add(nine);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.