Как добавить компоненты Swing в ActionListener? - PullRequest
2 голосов
/ 23 мая 2011

У меня есть JMenuItem с именем newMI, в классе, который расширяет JFrame.Я хочу добавить компоненты Swing в мой JFrame, когда я нажимаю JMenuItem.В целях тестирования я пытаюсь добавить JPanel и установить красный цвет фона JPanel.

Вот мой ActionListener:

newMI.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
        JPanel p = new JPanel();
        p.setBackground(Color.red);
        add(p);
   }
}

Однако это не работает.Я могу изменить цвет фона JPanel, если добавлю его в JFrame во время инициализации других компонентов Swing.Но я не могу добавить компоненты Swing в JFrame непосредственно внутри ActionListener.Может кто-нибудь помочь, пожалуйста?

Большое спасибо.

Ответы [ 2 ]

7 голосов
/ 23 мая 2011

Когда вы динамически добавляете / удаляете компоненты из видимого графического интерфейса, вам нужно сделать:

panel.add(...);
panel.revalidate();
panel.repaint();

Если вам нужна дополнительная помощь, тогда опубликуйте SSCCE , который демонстрирует проблему.

2 голосов
/ 23 мая 2011

вам нужно изменить макет вашего компонента - ваша новая панель была добавлена, но имеет размер 0x0 px. Позвоните layout(true) на свой компонент после добавления панели.

Если в вашем компоненте нет менеджера компоновки, вы должны вручную установить положение и размер добавленной панели после добавления ее в свой компонент.

...