为什么我的JButton在放入JPanel的构造函数时不显示?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我的JButton在放入JPanel的构造函数时不显示?相关的知识,希望对你有一定的参考价值。
我是Java中的GUI新手(并且我想在gneral编码),所以我很困惑为什么我的JPanel上的JButton只在我初始化并在具有JFrame的类上添加JButton时才显示。我想要做的是在JPanel上创建一个带JBUttons和GridLayout的电话键盘。
如果我初始化并将JButtons添加到其中包含JFrame的类的JPanel。我无法将JButtons添加到扩展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);
}
}
使用第二个选项时,窗口只是空白,但是主方法中的所有内容都按预期工作。为什么不在构造函数中使用按钮,以及如何让它工作(如果我可以让它像这样工作)?
答案
你不需要在JPanel
(DialPanel
构造函数中的第一行)中再创建一个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);
}
}
以上是关于为什么我的JButton在放入JPanel的构造函数时不显示?的主要内容,如果未能解决你的问题,请参考以下文章
Swing:如何在每个组件、JPanel、JButton 等上绘制动画?
如何使用默认 FlowLayout 在 JPanel 中将 JButton 居中?