2014-10-08 101 views
0

我試圖繪製每個單擊的圓形對象,然後將每個圓形對象存儲到Arraylist中,我不知道爲什麼我的程序不工作!如果我刪除了數組列表和創建新的圓對象的行,該程序將工作。我如何讓我的程序將所有電路對象存儲爲Arraylist?通過單擊鼠標按鈕來繪製和存儲對象

import javax.swing.JPanel; 
    import java.awt.Color; 
    import java.awt.Graphics; 
    import java.awt.event.MouseAdapter; 
    import java.awt.event.MouseEvent; 
    import java.util.ArrayList; 
    import java.util.Random; 

    public class CircleObj extends JPanel { 
     private int rColor; 
     private int gColor; 
     private int bColor; 
     private int radius; 
     private Random rand = new Random(); 
     private int xStart; 
     private int yStart; 
     ArrayList <Circle> xxx ; 

     public CircleObj() { 
     xxx = new ArrayList<Circle>(); 

     addMouseListener(new MouseAdapter() { 

      public void mouseClicked (MouseEvent e) { 

      xStart = e.getX(); 
      yStart = e.getY(); 
      rColor = rand.nextInt(256); 
      gColor = rand.nextInt(256); 
      bColor = rand.nextInt(256); 
      radius = rand.nextInt(20); 


      repaint(); 
      } 
     }); // end addMouseListener 
     } 

     public void paintComponent (Graphics g) { 
     super.paintComponent(g); 
     g.setColor(new Color(rColor, gColor, bColor)); 
     g.fillOval(xStart, yStart, radius, radius); 
     xxx.add(new Circle()); 
     } 

     private class Circle { 
      private int x; 
      private int y; 
      private int r; 
      private int rcol; 
      private int gcol; 
      private int bcol; 

      public Circle() 
       { 
       x=xStart; 
       y=yStart; 
       r=radius; 
       rcol= rColor; 
       gcol= gColor; 
       bcol= bColor; 

       } 




     } 

    } 

======

import javax.swing.JFrame; 
import java.awt.BorderLayout; 

public class HW3 { 
    public static void main (String[] arg) { 
    JFrame frame = new JFrame("Circles"); 
    CircleObj canvas = new CircleObj(); 

    frame.add(canvas, BorderLayout.CENTER); 
    frame.setBounds(250, 98, 600, 480); 
    //frame.setLayout(new BorderLayout()); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    } // end main 
} //end HW3 

回答

2

不要添加paintComponent方法中新的形狀,paintComponent可以要求任何數量的原因,其中有許多你不控制相反,創建它在觸發事件mouseClicked ...

public void mouseClicked (MouseEvent e) { 

    xStart = e.getX(); 
    yStart = e.getY(); 
    rColor = rand.nextInt(256); 
    gColor = rand.nextInt(256); 
    bColor = rand.nextInt(256); 
    radius = rand.nextInt(20); 

    xxx.add(new Circle(xStart, yStart, new Color(rColor, gColor, bColor), radius)); 

    repaint(); 
} 

,然後在paintComponent,通過ArrayList和對環是不是圓...

public void paintComponent (Graphics g) { 
    super.paintComponent(g); 
    for (Circle c : xxx) { 
     g.setColor(c.getColor()); 
     g.fillOval(c.getX(), c.getY(), c.getRadius(), c.getRadius()); 
    } 
} 

現在,你將不得不修改你Circle類,以提供該​​可以使用以便實際上畫的圈干將......

另外,你可以使用Java提供的Shape的API ...看看Working with Geometry瞭解更多詳細信息...

+0

非常感謝你兄弟。 – iali87 2014-10-08 00:55:42