Проблема перекрашивания Swing - PullRequest
0 голосов
/ 28 февраля 2012

Я использую Abeille Forms Designer в качестве редактора WYSIWYG моего приложения Swing.Я использовал этот инструмент для создания файла test.jfpr, который затем импортирую в проект Eclipse и помещаю в путь к классам.Затем я просто создаю JFrame, который использует этот файл в качестве FormPanel, и когда приложение запускается - вуаля - у вас есть очень красивый графический интерфейс, который потребовал нулевого усилия программирования.Мне это нравится!

Единственная проблема заключается в том, что когда приложение загружается, ничто внутри «клиентской области» (терминология Windows) не рисует - меню, а также основное содержимое экрана.

Когда я изменяю размер окна JFrame, все сразу рисует / рисует и выглядит великолепно.

Если я потом что-то делаю (выбираю пункт меню и т. Д.), Это должно изменить главный экран, Ничего не произошло.Но если я изменю размеры окна, то bam !Я вижу, что изменения вступают в силу.

Мне кажется, что это проблема рисования / перерисовки, когда существует разрыв между логикой моего приложения и созданными мною формами Абейля.

Есть ли способ - в Swing - программно заставить все окно (как клиентские, так и не клиентские области) перерисовать / обновить? Если нет, то кто-нибудь имеет представление о том, что здесь происходит??Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 28 февраля 2012

В дополнение к предложениям mKorbel,

  • Убедитесь, что вы создаете графический интерфейс в потоке диспетчеризации событий .

  • Убедитесь, что вы вызываете setVisible() только после вызова pack() на включающем Window.

1 голос
/ 28 февраля 2012

1) you have a very nice looking GUI that took zero programming effort. I love it!

2) If I then do something (selecting a menu item, etc.) that should change the main screen, nothing happens. But if I resize the window, then bam! I see the changes take effect.

3) Is there a way - in Swing - to programmatically force the entire window (client- and non-client areas alike) to repaint/refresh?

4) If not, then does anybody have an idea as to what is happening here?

  • этот фреймворк основан на JGoodies FormLayout , тогда вы должны знать, как работает этот пользовательский LayoutManager
0 голосов
/ 28 февраля 2012

Вы можете зарегистрировать actionListener в меню. После завершения процедуры меню вызовите функцию repaint для соответствующего компонента.

Для предотвращения мерцания может потребоваться дополнительная работа.

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