0

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

1 回答 1

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方法。它可能不会做任何事情,因此将其排除在外不会造成伤害(但保留它也不会)。

于 2013-07-16T09:38:59.933 回答