可能重复:
Java - repaint(x, y, w, h) doesn't call paintComponent? (with SSCCE)
我正在尝试这种neato表演技巧repaint(x, y, w, h)
,这肯定会帮助表现很多。
不幸的是,我在同一个班级中放入paintComponent
的特殊附加功能现在还没有被绘制。我在System.out.println()
的开头进行了paintComponent
测试,结果发现它甚至没有被调用(因为我们精明的读者可能从本段的开头就开始思考)。当我使用普通repaint()
时,paintComponent()
被调用,没问题。
具体来说,我有一个mouseListener
的JLabel,mouseEnter
重新标记了标签。
这笔交易是什么?我希望我错过了一些东西,这还有可能吗?额外的表现确实很好......
答案 0 :(得分:2)
repaint()
实际上是一个调用repaint(0, 0, width, height)
的单行,所以你的基本论点 - 带有参数的repaint()
与没有 - 的repaint()
根本不同可证明是假的。如果我是一个博彩人,我敢打赌,你传递给这个方法的论点描述了一个区域为零的区域(即宽度<= 0),所以RepaintManager
就是简单的无视请求。
您可以通过将参数更改为已知良好常量值来证明这一点,或者在传递参数值之前可能只需println()
。
答案 1 :(得分:1)
您可以使用JComponent#paintImmediately
1)确保通过使用/ wrap到
测试输出到Swing GUIif (SwingUtilities.isEventDispatchThread()) {
否则你可以获得exception from RepaintManager
2)repaint()
默认情况下可以调用EDT,直到第一个Thread#sleep(int)
调用
3)从Swing Timer调用绘画代码,输出将在EDT上,但如果Thread#sleep(int)
调用