2015-04-30 2 views
0

У меня есть программа, где я рисую прямоугольники, однако, когда я меняю цвет своего графического объекта (мыши), он тоже меняет все это. Должен ли я сделать еще один arraylist или можно добавить к существующему.добавление в arraylist с другим графическим объектом

public class Rectangles extends JPanel { 
private JRadioButton red, black; 
private Color c; 
private ArrayList<Point> points; 

public Rectangles() { 
    setLayout(new FlowLayout()); 
    setBackground(Color.white); 
    JPanel pane = new JPanel(); 
    pane.setBackground(Color.gray); 
    points = new ArrayList<Point>(); 
    addMouseListener(new MovementListener()); 
    red = new JRadioButton("Red"); 
    black = new JRadioButton("Black"); 
    red.addActionListener(new ChangeColorListener()); 
    black.addActionListener(new ChangeColorListener()); 
    ButtonGroup group = new ButtonGroup(); 
    group.add(red); 
    group.add(black); 
    red.setBackground(Color.red); 
    black.setBackground(Color.black); 
    add(pane); 
    pane.add(red); 
    pane.add(black); 

} 

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    g.setColor(c); 

    for (int i = 0; i < points.size(); i++) { 

     Point p = points.get(i); 

     g.drawRect(p.x, p.y, 15, 15); 

    } 

} 

private class MovementListener extends MouseInputAdapter { 
    public void mouseClicked(MouseEvent ex) { 

     addMouseMotionListener(new MovementListener()); 

    } 

    public void mouseMoved(MouseEvent ex) { 

     Point point = ex.getPoint(); 
     points.add(point); 

     repaint(); 

    } 
} 

private class ChangeColorListener implements ActionListener { 
    public void actionPerformed(ActionEvent ex) { 

     if (ex.getSource() == red) { 
      c = Color.red; 
     } else if (ex.getSource() == black) { 

      c = Color.black; 

     } 
    } 
} 
+0

Вам нужно каким-то образом связать цвет с фигурой, которую вы рисуете, может быть, «Карта»? – MadProgrammer

+0

Почему вы не используете 'HashMap' вместо' ArrayList', сохраните как 'point', так и' color'. – Blip

ответ

0

Возможно, вам понадобится добавить еще одну недвижимость к этим объектам в будущем. Я рекомендую создать для этого еще один класс.

class MyPoint { 
    // if the values would be unchangeable make them final 
    private Point point; 
    private Color color; 

    public MyPoint(Point point, Color color) { 
     this.point = point; 
     this.color = color; 
    } 

    // getters 
} 

Также небольшой совет, в конструкторе вы должны установить только параметры. В вашем случае я бы создал метод с именем «init()», и там создаются все панели и т. Д.

Смежные вопросы