Почему мои JButton не отображаются при добавлении в конструктор для JPanel? - PullRequest
2 голосов
/ 03 апреля 2019

Я новичок в 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);
    }
}

При втором варианте окно просто пустое, но все, что в основном методе, работает так, как задумано. Почему не работают кнопки в конструкторе, и как я могу заставить его работать (если я могу заставить его так работать вообще)?

1 Ответ

2 голосов
/ 03 апреля 2019

Вам не нужно создавать еще один 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...