Ожидание завершения перерисовки элементов Swing - PullRequest
3 голосов
/ 27 февраля 2011

Я хочу иметь возможность дождаться завершения Swing repaint.

Пример:

frame.repaint();
wait_for_repaint_to_finish();
//work

У меня есть что-то вроде этого:

SwingUtilities.invokeAndWait(new Runnable() {

    public void run() {
        try {
            frame.repaint();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

Это правильный способ сделать это?

Ответы [ 2 ]

3 голосов
/ 27 февраля 2011

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

repaint () просто планирует рисование. RepaintManager потенциально объединит несколько запросов на рисование и выполнит их одновременно, чтобы сделать рисование более эффективным.

Сказав это, если вам действительно нужно форсировать перерисовку, вы можете использовать

JComponent.paintImmediately(...);

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

1 голос
/ 27 февраля 2011

Вы можете переопределить paintComponent():

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    ...
    // repaint finished here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...