将绘制的圆圈对象添加到Arraylist

时间:2014-09-19 01:56:01

标签: java swing arraylist

我创建了一个对象的Arraylist(Circles)。我添加了一个鼠标点击事件,所以一旦我点击面板,一个圆圈将被淹没并存储在arraylist中。我被困住了,无法想到绕过我的代码...我会很感激一些可以帮助我解决问题的提示。

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;


public class Circle extends JFrame
{

    private JPanel panel;
    private  ArrayList <Circle> circle;

    public static void main(String[]args)

        {

        setTitle("Drawing Circles");
        // Set the size of the window.
        setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        // Specify an action for the close button.
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // set the Frame's layout
        setLayout(new BorderLayout());
        // Add the panels to the frame's content pane.
        add(panel, BorderLayout.CENTER);
        // Display the window.
        setVisible(true);

        circle = new ArrayList<Circle>();
        }

    public Circle()
        {
        panel.addMouseListener(new ClickingLitener());
        }




    private class ClickingLitener implements MouseListener
    {

        public void mouseClicked(MouseEvent e)
            {
            circle.add(new Circle());

            // somehow I need to call panel.paintComponent ... right ?
            }
    }

}

1 个答案:

答案 0 :(得分:1)

您的Circle类扩展了JFrame。您无法在JPanel上添加或绘制JFrame,因此您的基本方法存在缺陷。

如果要进行自定义绘制以在面板上绘制Circle,则需要存储有关要绘制的Circle的信息。然后在面板的paintComponent()方法中迭代ArrayList并绘制所有圆。将新Circle添加到ArrayList时,只需调用面板上的repaint()即可。

查看Custom Painting Approaches以了解此方法的工作示例。代码添加&#34;矩形&#34;到面板,但你应该能够轻松地更改代码以添加圆圈。