repaint()不调用paintComponent

时间:2017-07-18 23:30:01

标签: java swing graphics repaint

请帮助我理解为什么如果从 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);

这样它实际上会对面板进行更改,但颜色不会改变,我会得到相同的输出。

0 个答案:

没有答案