在java中按下按钮时如何绘制正方形

时间:2013-07-16 09:35:15

标签: java swing drawing paintcomponent repaint

我正在编写一个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

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

1 个答案:

答案 0 :(得分: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方法。它可能没有做任何事情,所以把它留下来不应该伤害(但也不能保留它)。