2014-09-28 77 views
0

所以我有这样的代码:如何重新绘制/再次调用paintComponent?

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岁那样解释这一点吗?

+0

调用repaint()怎么样? – maskacovnik 2014-09-28 13:07:44

回答

2

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

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

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

4

致电repaint(),它会再次绘制它。

相关问题