Swing добавить новый компонент - PullRequest
1 голос
/ 19 июня 2010

Мне нужно добавить динамически Компоненты в JPanel, но если я сделаю просто добавить (Компонент), то компонент не появится, если я сделаю, то JPanel.revalidate ();затем появляется, но JPanel мигает, могу ли я сделать это более нормально, не мигая?

Хм, я нашел решение, сразу после добавления (компонент);у меня есть запись component.repaint ();и это работает, но теперь есть другая проблема с изменением размера окна, если я изменяю размер окна, то все мои добавленные компоненты исчезают !!!

Ответы [ 3 ]

3 голосов
/ 18 августа 2010

Это просто, но вы должны убедиться, что каждый компонент

1) добавлен из EDT (см. SwingUtilities.invokeLater())

2), добавлен только один раз за экземпляр

0 голосов
/ 16 июля 2010

если вы добавляете новый компонент, вам нужно позвонить revalidate.

Пример:

panel.add(new JButton(...), ...);
panel.revalidate();

Убедитесь, что вы звоните из EDT.

Если он все еще мерцает, взгляните на panel.setDoubleBuffered.

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

0 голосов
/ 19 июня 2010

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

Используйте метод Component.setVisible(boolean b), чтобы показать и скрыть компоненты.

Edit:

Я только что попробовал простой тестовый класс, где я добавил случайные компоненты в основной JFrame, и он работал нормально.

Попробуйте позвонить JFrame.pack() после JPanel.revalidate().

Если это не имеет значения, не могли бы вы опубликовать часть своего кода, куда вы добавляете динамические компоненты?

Другое Редактирование:

Сделайте ваш главный компонент Реализуйте интерфейс ComponentListener и реализуйте метод componentResized(ComponentEvent e) для вызова JFrame.pack ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...