请帮助我理解为什么如果从 actionPerformed()方法内部调用,repaint()将不会调用paintComponent()。我已经尝试了一切,但我仍然没有得到它。我已经超简化了代码,但问题仍然存在。
这是代码:
JPanel的paintComponent():
@Override
protected void paintComponent(Graphics gr) {
super.paintComponent(gr);
System.out.println("paint");
}
ActionListener(它是面板)通过以下方式注册到Timer:
@Override
public void actionPerformed(ActionEvent e) {
repaint();
System.out.println("repaint");
}
我还在面板中添加了一个鼠标侦听器。这是方法:
@Override
public void mousePressed(MouseEvent e) {
repaint();
System.out.println("repaint");
}
如果我按两次鼠标,则会打印(如预期的那样)
paint
repaint
paint
repaint
但是如果我调用timer.start()就会打印
repaint
repaint
repaint
repaint
有什么想法吗?
感谢
编辑:我还将此行添加到actionPerformed()方法中:
setBackground(Color.RED);
这样它实际上会对面板进行更改,但颜色不会改变,我会得到相同的输出。