Принудительная немедленная компоновка и рисование в Swing - PullRequest
6 голосов
/ 21 января 2011

Я не могу заставить макет в Swing. Мне добавили JComponent к JLayeredPane, и я установил границу для JComponent. Затем я хочу немедленно перерисовать все - не в смысле «пожалуйста, сделайте это как можно скорее», как invalidate(), а синхронно и немедленно. Любая помощь? Кажется, я не могу найти правильный способ сделать это, и все мои чтения о invalidate(), validate(), repaint(), doLayout(), etc просто смущают меня больше!

Ответы [ 2 ]

2 голосов
/ 21 января 2011

Согласно это (см. Раздел «Синхронное рисование») метод paintImmediately () должен работать.

0 голосов
/ 21 января 2011

Самый надежный способ заставить Swing обновить дисплей - это использовать SwingUtilities.invokeLater.В вашем случае это выглядело бы примерно так:

SwingUtilities.invokeLater(new Runnable {
                             public void run() { 
                                somecomponent.repaint();
                             }
                           });

Я понимаю, что 'invokelater' не совсем звучит так, как будто он делает что-то немедленное, но на практике события, публикуемые таким образом, обычно выполняются довольно быстро по сравнению с простонапример, somecomponent.repaint().Если вам абсолютно необходимо подождать, пока ваш управляющий код будет ждать обновления графического интерфейса, то есть также invokeAndWait, но мой опыт показывает, что это редко необходимо.

См. Также: документ об отправке события на качелях.

...