Проблема Java Swing revalidate () и repaint () - PullRequest
5 голосов
/ 20 июня 2011

У меня есть небольшое приложение Java, которое должно динамически добавлять и удалять поля, нажимая кнопки «+» и «-» соответственно.Я заставил это работать, вызывая revalidate () и затем repaint () для всех родительских контейнеров вплоть до JFrame в ActionListener.не работают, и JPanels не изменить размер правильно.Это случается нечасто и, по-видимому, наугад и приводит меня к мысли, что это может быть проблемой параллелизма.Я попытался запустить родительский контейнер из потока диспетчеризации событий, но это не решило проблему.

Это на самом деле проблема параллелизма или я лаю не то дерево?Кто-нибудь знает, что происходит и как это можно решить?

Очень ценится

-SwingNoob

Ответы [ 2 ]

3 голосов
/ 20 июня 2011

это не ответ на вопрос OP хороший пример , проблема OP, возможно, в LayoutManager и что-то неизвестное в коде OP

1 /, если вы добавляете новый JComponent в контейнер, тоВы должны позвонить

validate();
repaint(); //lay with LayoutManager required that 

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

revalidate();
repaint(); // lay with LayoutManager required that 

3 / выглядит так же, как повторная проверка покрыта, проверьте также

1 голос
/ 20 июня 2011

Запуск контейнера из потока AWT / EDT недостаточно.

Необходимо выполнить каждое изменение макета для контейнера в потоке AWT / EDT.

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

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