3

我对Java真的很陌生,当点击它时我需要一个圆圈来围绕一个JFrame移动,但是这个圆圈必须获得随机坐标。到目前为止,此代码每次单击时都会生成一个新圆圈,但所有其他圆圈也会保留在那里。我只需要一圈就可以在框架周围移动。所以也许有人可以帮助我一点:)

这是我的代码:

public class test2 extends JFrame implements MouseListener {
int height, width;
public test2() {
    this.setTitle("Click");
    this.setSize(400,400);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    addMouseListener(this);
    width = getSize().width;
    height = getSize().height;
}

public void paint (Graphics g) {
    setBackground (Color.red);
    g.setColor(Color.yellow);
    int a, b;
    a = -50 + (int)(Math.random()*(width+40));
    b = (int)(Math.random()*(height+20));
    g.fillOval(a, b, 130, 110);
}

    public void mouseClicked(MouseEvent e) {
    int a, b;
    a = -50 + (int)(Math.random()*(width+40));
    b = (int)(Math.random()*(height+20));
    repaint();
}

public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}

public static void main(String arg[]){

    new test2();
}

}
4

2 回答 2

5

看看这是否有帮助,在这里我在绘制圆圈之前用背景颜色填充了整个矩形。虽然效率不高,但达到目的

替换paint方法如下

public void paint (Graphics g) {
        setBackground (Color.red);
        g.setColor(Color.red);
        g.fillRect(0, 0, width, height);
        g.setColor(Color.yellow);
        int a, b;
        a = -50 + (int)(Math.random()*(width+40));
        b = (int)(Math.random()*(height+20));
        g.fillOval(a, b, 130, 110);
    }
于 2012-09-23T09:32:08.217 回答
5

我认为您在这里遇到的主要问题之一是您没有创建全局 a 和 b 变量。每次调用paint()andmouseClicked()方法时都会创建 2 个新变量。还有另外两个问题/警告。

  1. 如果您使用的`paint()paintComponents(Graphics g)JFrame
  2. 您需要super.paint(g);在您的 paintComponents() 定义下添加该行。

实际上,我很惊讶任何东西都被绘制出来了。此外,Anony-Mousse 在谈到约定时是对的。类名应始终以大写字母开头。

您的代码应如下所示:

public class Test2 extends JFrame implements MouseListener {
int height, width;
int a,b;
public test2() {
    this.setTitle("Click");
    this.setSize(400,400);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    addMouseListener(this);
    width = getSize().width;
    height = getSize().height;
}

public void paintComponents(Graphics g) {
    super.paint(g);
    setBackground(Color.red);
    g.setColor(Color.yellow);
    a = -50 + (int)(Math.random()*(width+40));
    b = (int)(Math.random()*(height+20));
    g.fillOval(a, b, 130, 110);
}

    public void mouseClicked(MouseEvent e) {
    int a, b;
    a = -50 + (int)(Math.random()*(width+40));
    b = (int)(Math.random()*(height+20));
    repaint();
}

public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}

public static void main(String arg[]){

    new test2();
}

}
于 2012-09-23T09:35:19.687 回答