2014-10-08 48 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

相关问题