Я новичок в GUI на Java (и думаю, что я пишу в целом), поэтому меня смущает, почему JButtons на моем JPanel отображаются только в том случае, если я инициализирую и добавляю JButtons в класс, имеющий JFrame. Я пытаюсь создать клавиатуру телефона с JBUttons и GridLayout на JPanel.
Если я инициализирую и добавлю JButtons к JPanel в классе, в котором есть JFrame. Я не могу добавить 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);
}
}
При втором варианте окно просто пустое, но все, что в основном методе, работает так, как задумано. Почему не работают кнопки в конструкторе, и как я могу заставить его работать (если я могу заставить его так работать вообще)?