等待Swing的元素重绘完成

时间:2011-02-27 13:22:43

标签: java swing repaint

我希望能够等待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 个答案:

答案 0 :(得分:3)

问题是为什么你需要这样的东西?为什么要重新绘制整个框架并等待它完成。如果我们知道你想要做什么,我们可以给出一个更好的建议。

repaint()只是安排绘画完成。 RepaintManager可能会整合多个绘制请求并一次执行它们,以提高绘图效率。

话虽如此,如果你真的需要强制重画,你可以使用

JComponent.paintImmediately(...);

但这只应作为最后的手段而不是解决设计问题。

答案 1 :(得分:1)

您可以覆盖paintComponent()

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