2012-04-10 2 views
0

Я пытаюсь динамически добавлять некоторые компоненты в JPanel, но, к сожалению, они не появляются. Я вижу только те, что добавлены в constuctor.Динамическое добавление компонентов в JPanel

Обновленная версия (добавление нового JPanel, где все компоненты будут):

public class View extends JPanel { 

JPanel panel = new JPanel(); 
JLabel label; 
JLabel labels[]; 
JButton b1 = new JButton("OK"); 

public View() { 
    this.setLayout(new FlowLayout()); 
    this.add(panel); // adding a new JPanel 
    label = new JLabel("My label"); 
    panel.add(label); // adding label to the new panel (this one works) 
} 


public void showLabels() { 
    System.out.println("function showLabels called"); 

    labels = new JLabel[5]; 

    for (int i = 0; i < 5; i++) { 
     labels[i] = new JLabel("Label: " + i); 
     panel.add(labels[i]); // this one doesn't work 
    } 
    panel.add(b1); // this one doesn't work, too 
    this.validate(); // validating this class (parent container) 
    panel.validate(); // validating the panel, where all the components are 
    } 
} 

Unfortunatelly ничего не изменилось.

+1

ли вы попробуйте позвонить 'пакет()' на родителя 'JFrame'? – Jack

+0

Пока нет. Разве этого недостаточно, чтобы просто вызвать revalidate() или что-то еще? – user1170330

+0

Какова структура JPanel? Некоторые компоненты могут быть перекрыты в некоторых макетах, таких как BorderLayou. Попробуйте BoxLayout или FlowLayout. – elias

ответ

4

Звоните validate() на родительский контейнер, как показано в Nested Layout Example. Эти ярлыки слева внизу добавляются динамически. Обратите внимание, что вызов pack() может привести к изменению размера графического интерфейса, тогда как вызов validate() не будет. Если вам нужен, чтобы изменить размер графического интерфейса - звоните pack(), иначе звоните validate().

+0

Даже когда я поместил все свои компоненты сначала на seperat JPanel, а затем поместил новый JPanel на первый (родительский) JPanel 'View' и переустановил и перерисовал оба, ничего не изменилось ... – user1170330

+0

Чтобы лучше помочь, опубликуйте [ SSCCE] (http://sscce.org/). –

+0

* «revalidate and repaint» *. Заметьте, что я не упоминал *** ни *** из этих методов (по уважительной причине). Возможно, вы думаете о ответе mre (который теперь удален). –

Смежные вопросы