3

私はJavaを初めて使用し、クリックしたときにJFrame内を移動するための円が必要ですが、円はランダムな座標を取得する必要があります。これまでのところ、このコードはクリックされるたびに新しい円を生成しますが、他のすべての円もそこにとどまります。フレーム内を移動するのに必要な円は1つだけです。だから多分誰かが私を少し助けることができます:)

これが私のコードです:

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

ここであなたが抱えている大きな問題の 1 つは、グローバルな a 変数と b 変数を作成していないことだと思います。paint()およびmouseClicked()メソッドを呼び出すたびに、2 つの新しい変数を作成します。他に 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 に答える