如何重新绘制/再次调用paintComponent?

时间:2014-09-28 13:05:58

标签: java swing paintcomponent repaint

所以我有这段代码:

public class myPanel extends JPanel implements ActionListener{
    int x = 0;
    JButton myButton = new JButton("Click me");

    public myPanel(){
    super().setLayout(null);
    myButton.setBounds(50,50,50,50);
    super().add(myButton);
    }

    public void paintComponent(Graphics g){
    super.paintComponent(g);
    if(x==1)
    g.drawString("hi",10,10);
    }

    public void actionPerformed(ActionEvent e){
        if(e.getSource()==myButton){
        x=1;
        //Do something here
        }
    }
}

如何再次调用paintComponent?假设当我按下按钮时,它再次调用paintComponent并在检查整数x是否等于1之后绘制字符串“Hi”?先感谢您!!!这里对Java来说还是一个新手,所以你们可以解释一下,就像你对一个10岁的孩子一样吗?

2 个答案:

答案 0 :(得分:4)

调用repaint(),它会再次绘制它。

答案 1 :(得分:2)

在应该更改GUI视图的状态更改后,您将调用repaint()。例如,如果按钮更改了变量,并且如果这应该反映在视图中的更改中,请在按钮的ActionListener中调用repaint()。如果鼠标拖动更改了ImageIcon sprite的视图,那么您将在MouseMotionListener的mouseDragged方法中调用repaint。如果Swing Timer驱动动画,那么你可以在Swing Timer的ActionListener中调用repaint()

您永远不想做的一件事就是从repaint()paint(Graphics g)方法中调用paintComponent(Graphics g),因为这会导致完全超出您控制范围的循环。

侧面说明,一般情况下你会想避免使用null布局和setBounds,因为这会使GUI非常不灵活,虽然它们在一个平台上看起来很好但在大多数其他平台或屏幕分辨率上看起来很糟糕而且非常困难更新和维护。