[英]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.