2012-02-18 5 views
0

これは私の2学期でJavaをやっているので、気をつけてください。私の課題の1つは、ラジオボタンをクリックし、Circleの描画メソッドを使用して、マウスボタンをクリックしたときにJpanel ContentペインにCircleオブジェクトを描画することです。その後、各サークルオブジェクトをArraylistに保存し、ラジオボタンをクリック解除するまでペインに残ります。 CircleオブジェクトをArraylistに追加し、そのサークルを画面上に残しておく以外は、すべて動作させることができます。一度に1つのサークルを描き、再びクリックすると最初の1つのサークルを消去します。私はArraylistに作成された新しいサークルを追加するとは思わない、私は単なるサークルです。わからない。Arraylistにサークルオブジェクトを追加して画面に表示する

円を描いている部分のコードです。

私の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;` 
+0

私はオリジナルの投稿にコードといくつかの詳細を追加しました。 – handro

答えて

1

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

もう1つの問題は、円が作成されてからもう一度forループで2回描かれていることです。サークルを描画させるために呼び出しを削除して、それらをすべてforループに描画するだけです。

最後に、これは望ましい動作である場合とそうでない場合がありますが、現在はpaintComponentが呼び出されるたびに新しいサークルを作成しています。この機能は多く呼び出すことができるので、潜在的にあなたが望むより多くのサークルで終わることができます。新しいサークルが作成されている時点を再検討することができます。

次の2つの問題を修正しました。

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 
    } 
+0

それはそれでした。最初にサークルを描く必要があると思っていましたが、今度は新しいサークルを作成したことがわかりました。それをArraylistに保管し、.draw(g)がそれを描きました。どうもありがとうございました!! – handro

関連する問題