2013-07-16 35 views
0

我正在编写一个java程序,您可以在其中输入长度并输入矩形的宽度并输出周长和面积。但现在,我想这个数字。但是我不知道如何在按下按钮时绘制它。它应该是这样的?:如何在java中按下按钮时绘制方形

public void paintComponent(Graphics g) { 
    paintComponent(g); 
    g.setColor(Color.blue); 
    g.drawRect(10, 10, 80, 30);  
} 

public void actionPerformed(ActionEvent e) { 
    paintComponent(); 
} 

因为当我这样做,它给了我一个错误说:

method paintComponent in class Rectangles cannot be applied to given types; 
required: Graphics 
found: no arguments 

所以,我真的不知道该怎么办。

回答

4

不,您不应该直接致电paintComponent。无论如何,该方法将自动调用,所以在点击之前将绘制方块。

你可以使用一个布尔标志,以表明您点击的按键,调repaint()后重绘请求:

boolean clicked = false; 

public void paintComponent(Graphics g) { 
    if (clicked) { 
     g.setColor(Color.blue); 
     g.drawRect(10, 10, 80, 30); 
    } 
} 

public void actionPerformed(ActionEvent e){ 
    clicked = true; 
    repaint(); 
} 

此外,从未让一个方法调用本身具有完全相同的参数。这削减了

public void paintComponent(Graphics g) { 
    paintComponent(g); 

将无限地经常调用相同的功能(或直到堆栈已满)。

我想你看到某处以下:

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

这是确定的,它会调用父类的paint方法。它可能不会做任何事情,所以不应该伤害它(但它也不会)。

+0

谢谢,但是当我这样做时,它给了我一个'java.lang.StackOverflowError'。我不知道为什么。 – DLJ

+0

@DLJ我没有说清楚,但是我从'paintComponent'中删除了对'paintComponent(g);'的调用。你应该做同样的:)(或者把它作为'super.paintComponent(g)') –

+0

我已经完成了(谢谢),但现在我看不到它了。 – DLJ

相关问题