2012-02-18 97 views
0

這是我的第二個學期Java,因此請耐心等待。我的任務之一是單擊單選按鈕,並在單擊鼠標按鈕時使用Circle的繪製方法在Jpanel內容窗格上繪製Circle對象。然後將每個Circle對象存儲在Arraylist中,以便它保留在窗格上,直到我取消單選按鈕。除了將Circle對象添加到Arraylist並在屏幕上保留該圓之外,我可以讓所有的工作都可以工作。當我再次點擊時,它將一次只繪製一個圓圈並清除前一個圓圈。我不認爲我在爲Arraylist創建新的圈子,我只是一個圈子。不確定。將Circle對象添加到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;` 
+0

我將代碼和一些細節添加到了我的原始發佈的圖紙。 – handro 2012-02-18 22:12:14

回答

1

你有幾個問題。首先,在你的paintComponent函數中,你正在創建一個圈子的本地ArrayList。每次調用paintComponent時,都會重新創建此變量。相反,只需使用屬於該類的Circle的ArrayList即可。

你擁有的另一個問題是,每個圓圈被繪製兩次,在創建圈子後一次,另一次在for循環。你應該刪除這個調用來讓這個圓圈自己畫出來,然後把它們全部繪製在for循環中。

最後,這可能是也可能不是所期望的行爲,但您目前各的paintComponent獲取調用時創建一個新的循環。你可能會得到比你想要的多得多的圈子,因爲這個功能可以被稱爲很多。您可能想重新考慮創建新圈子的時間點。

以下修復第一對夫婦的問題。

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 2012-02-18 23:03:55