Время выполнения JFrame с добавлением JPanel - PullRequest
2 голосов
/ 15 сентября 2011

Я работаю с JFrame добавлением JPanel экземпляров динамически следующим образом:

private void addBox(int x, int y){
 JPanel panel = new JPanel();
 panel.setBackground(Color.RED);
 panel.setSize(10, 10);
 panel.setVisible(true);
 panel.setLocation(x, y);
 this.getContentPane().add(panel);
}

Проблема в том, что при использовании метода addBox экземпляр JPanel не появляется в JFrame. Единственный способ увидеть окно, которое мне нужно, - вручную изменить размер окна.

Примечание: я пытался использовать this.pack();, но это не сработало.

Ответы [ 3 ]

3 голосов
/ 15 сентября 2011

Вам нужно позвонить revalidate() и repaint() после таких структурных изменений в GUI.

Обратите внимание, что setSize и setLocation предпочтительно должны обрабатываться менеджером макета.

Ссылка по теме:

2 голосов
/ 15 сентября 2011

Для чего предназначены коробки?

Если они чисто визуальные и вы не собираетесь добавлять к ним компоненты, было бы лучше определить класс Box (или использовать Rectangle2D ) и нарисовать или заполнить их в время paintComponent().

В качестве альтернативы, нарисуйте их в Graphics объекте BufferedImage и добавьте изображение к JLabel, как показано здесь .

enter image description here

1 голос
/ 15 сентября 2011

Этот пример показывает добавить / удалить / упаковать может помочь.

private void addBox(int x, int y){
   JPanel panel = new JPanel();
   panel.setBackground(Color.RED);
   add(panel);
   //If there isn't another JPanel, then this way you'll occupy 
   //the whole JFrame area; by defalut, JFrame has BorderLayout,
   //and only one JComponent can occupy the central area 
   revalidate();
   repaint();
}
...