簡體   English   中英

單擊鼠標移動一個圓圈

[英]Move a circle on mouse click

我對Java真的很陌生,當單擊JFrame時,我需要一個圓來使其圍繞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();
}

}

看看是否有幫助,這里我在畫圓之前用背景色填充了整個矩形。 雖然效率不高但達到了目的

替換油漆方法如下

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);
    }

我認為您在這里遇到的主要問題之一是您沒有使全局a和b變量。 每次調用paint()mouseClicked()方法時,都會創建2個新變量。 還有其他兩個問題/警告。

  1. 如果您使用的是JFrame則您的`paint()方法實際上應該稱為paintComponents(Graphics g)
  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();
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM