Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java repaint()不调用paintComponent_Java_Swing_Graphics_Repaint - Fatal编程技术网

Java repaint()不调用paintComponent

Java repaint()不调用paintComponent,java,swing,graphics,repaint,Java,Swing,Graphics,Repaint,请帮助我理解,如果从actionPerformed()方法内部调用,为什么repaint()不会调用paintComponent()。我什么都试过了,但还是不明白。我已经对代码进行了极度简化,但问题仍然存在。 代码如下: JPanel的paintComponent(): ActionListener(即面板)通过以下方式注册到计时器: @Override public void actionPerformed(ActionEvent e) { repaint(); System.

请帮助我理解,如果从actionPerformed()方法内部调用,为什么repaint()不会调用paintComponent()。我什么都试过了,但还是不明白。我已经对代码进行了极度简化,但问题仍然存在。 代码如下:

JPanel的paintComponent():

ActionListener(即面板)通过以下方式注册到计时器:

@Override
public void actionPerformed(ActionEvent e) {
    repaint();
    System.out.println("repaint");
}
我还向面板添加了一个鼠标侦听器。方法如下:

@Override
public void mousePressed(MouseEvent e) {
    repaint();  
    System.out.println("repaint");
}
如果我按两次鼠标,它就会打印(如预期的那样)

但如果我调用timer.start()它会打印

repaint
repaint
repaint
repaint
有什么想法吗

谢谢

编辑:我还将这一行添加到actionPerformed()方法中:


所以它实际上改变了面板,但是颜色没有改变,我也得到了同样的结果。

欢迎来到被动绘画的奇妙世界,
repaitmanager
repaitmanager
正在决定应该画什么,可能会决定在以后安排绘画活动,或者根据需要将它们结合起来。因为鼠标会导致系统图形发生变化,所以它倾向于更可靠地生成重绘请求。至于你的
计时器
,我们需要看更多的上下文才能得出明确的结论。。。i、 e.您是否在同一对象@MadProgrammer的同一实例上请求重新绘制,我是JAVA新手,因此如果我错了,请道歉,但计时器是在这个JPanel的构造函数中实例化的。此外,该面板没有其他实例(也没有其他面板)。狙击手是经过长时间的灼烧之后的最终结果。最初的paintComponent()和actionPerformed()方法确实改变了面板。我做了一个非常快速的测试,对我来说效果很好,每次
计时器
单击时,它都会调用
重新绘制
,然后生成一个“绘制”消息-也许你应该考虑提供一个可运行的例子,它可以可靠地再现你的问题,以更好地帮助你更快地发布A或。
paint
repaint
paint
repaint
repaint
repaint
repaint
repaint
setBackground(Color.RED);