2011-02-27 61 views
3

我希望能夠等待Swing的repaint完成。等待Swing的元素重繪完成

例子:

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

我有這樣的事情:

SwingUtilities.invokeAndWait(new Runnable() { 

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

這是做了正確的方法是什麼?

+0

這可能有助於知道你正在努力完成什麼。 – trashgod

+0

重新格式化的代碼;如果不正確請回復。 – trashgod

回答

2

的問題是,爲什麼還需要這樣的事?你爲什麼要重畫整個畫面並等待它完成。如果我們知道您正在嘗試做什麼,我們可以提供更好的建議。

repaint()只是計劃繪畫完成。 RepaintManager可能會合並多個繪畫請求,並一次執行它們以使繪畫效率更高。

說了這麼多,如果你真的需要強制重繪可以使用

JComponent.paintImmediately(...); 

但是,這隻能作爲最後的手段,而不是解決設計問題。

1

您可以覆蓋paintComponent()

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    ... 
    // repaint finished here 
}