Java - 重绘(x,y,w,h)不调用paintComponent?

时间:2012-02-15 02:42:00

标签: java swing repaint paintcomponent

  

可能重复:
  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重新标记了标签。

这笔交易是什么?我希望我错过了一些东西,这还有可能吗?额外的表现确实很好......

2 个答案:

答案 0 :(得分:2)

repaint()实际上是一个调用repaint(0, 0, width, height)的单行,所以你的基本论点 - 带有参数的repaint()与没有 - 的repaint()根本不同可证明是假的。如果我是一个博彩人,我敢打赌,你传递给这个方法的论点描述了一个区域为零的区域(即宽度<= 0),所以RepaintManager就是简单的无视请求。

您可以通过将参数更改为已知良好常量值来证明这一点,或者在传递参数值之前可能只需println()

答案 1 :(得分:1)

您可以使用JComponent#paintImmediately

1)确保通过使用/ wrap到

测试输出到Swing GUI
if (SwingUtilities.isEventDispatchThread()) {

否则你可以获得exception from RepaintManager

2)repaint()默认情况下可以调用EDT,直到第一个Thread#sleep(int)调用

3)从Swing Timer调用绘画代码,输出将在EDT上,但如果Thread#sleep(int)调用

,则定时器也不起作用