0

これはJavaを行う私の2学期ですので、しばらくお待ちください。私の割り当ての一部は、ラジオボタンをクリックし、Circleのdrawメソッドを使用して、マウスボタンがクリックされたときにJpanelコンテンツペインにCircleオブジェクトを描画することです。次に、各CircleオブジェクトをArraylistに格納して、ラジオボタンのクリックを解除するまでペインに表示されるようにします。CircleオブジェクトをArraylistに追加し、その円を画面上に保持することを除いて、すべてを機能させることができます。一度に1つの円を描画し、もう一度クリックすると最初の前の円を消去します。作成した新しいサークルをArraylistに追加しているとは思いません。ただのサークルです。わからない。

これが円を描いている部分の私のコードです。

public class MyPanel extends JPanel {

  public ArrayList<Circle> circles; 

  public void paintComponent(Graphics g) {
    Circle c = new Circle(xstart, ystart);   //create a new circle
    ArrayList<Circle> circles = new ArrayList<Circle>();
    if (drawing){ 
        c.draw(g);
        circles.add(c);
        for(int k=0; k<circles.size(); k++){
            circles.get(k).draw(g);
            }
    }           // draw the circle

MouseTestコンストラクターで描画ブール値を描画および宣言し、ラジオボタンに関連付けるためのコード。真を描くということは、ラジオボタンがクリックされたときに円を描くことができることを意味します。

JPanel radioPanel = new JPanel(new GridLayout(2,0)); //new GridLayout(y, x)
radioPanel.add(circleButton);
radioPanel.add(trackButton);    
cp.add(radioPanel,BorderLayout.EAST);
drawing = false;

circleButton.addActionListener(new ActionListener() { 
//Set drawing to true when the button is clicked
        public void actionPerformed(ActionEvent ae) {
            drawCircles();
        }

    }); 

 public void drawCircles() {    //initialize tracking to false
    drawing = !drawing;` 
4

1 に答える 1

1

いくつかの問題があります。まず、paintComponent関数で、円のローカルArrayListを作成します。paintComponentが呼び出されるたびに、この変数を再作成します。代わりに、クラスに属するサークルのArrayListを使用してください。

もう1つの問題は、各円が2回描画されていることです。1回は円が作成された後、もう1回はforループに描画されます。呼び出しを削除して円自体を描画し、それらすべてをforループで描画する必要があります。

最後に、これは望ましい動作である場合とそうでない場合がありますが、現在、paintComponentが呼び出されるたびに新しいCircleを作成しています。この関数は多くの呼び出しが可能であるため、必要以上に多くの円が作成される可能性があります。新しいサークルがどの時点で作成されているかを再検討することをお勧めします。

以下は、最初のいくつかの問題を修正します。

public class MyPanel extends JPanel {

  public ArrayList<Circle> circles = new ArrayList<Circle>(); 

  public void paintComponent(Graphics g) {

    Circle c = new Circle(xstart, ystart);   //create a new circle
    circles.add(c);
    if (drawing){  
        for(int k=0; k<circles.size(); k++){
            circles.get(k).draw(g);
        }
    }           // draw the circle
  }
于 2012-02-18T22:42:43.607 に答える