绘制未知数量的形状

Drawing an unknown number of shapes

该程序应该在用户单击的位置绘制圆圈。目前,它只绘制了 5 个圆圈。我想知道,如何修改这段代码,使其可以不受限制地画圆。考虑一个场景,我不知道我应该画多少个圆圈。这是我的代码:

public class 绘图板 {

public static void main(String[] args){

    new LookAndFeel();

}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

}

class LookAndFeel 扩展了 JPanel{

JFrame f;
int n = 0;
double points[][] = new double[6][5];
EventManager EMobj = new EventManager();

public LookAndFeel(){
    f = new JFrame("Drawing Board");
    f.setBounds(0,0,1920,1080);
    f.add(this);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    f.setResizable(false);
    addMouseListener(EMobj);

}

public void paintComponent(Graphics g){

    g.setColor(Color.RED);

    if(n >= 1)
        g.fillOval((int)points[0][0], (int)points[1][0], 80, 80);
    if(n >= 2)
        g.fillOval((int)points[1][1], (int)points[2][1], 80, 80);
    if(n >= 3)
        g.fillOval((int)points[2][2], (int)points[3][2], 80, 80);
    if(n >= 4)
        g.fillOval((int)points[3][3], (int)points[4][3], 80, 80);
    if(n >= 5)
        g.fillOval((int)points[4][4], (int)points[5][4], 80, 80);       
    if(n==5)
        removeMouseListener(EMobj);
}

class EventManager extends MouseAdapter{


    public void mouseClicked(MouseEvent e){

        points[n][n] = e.getX();
        points[n+1][n] = e.getY();
        n++;
        repaint();

    }
}

}

查看 Custom Painting Approaches

它显示了执行此操作的两种常用方法:

  1. 保留要绘制的对象的 ArrayList,然后在 paintComponent() 方法中遍历该列表。

  2. 直接绘制到 BufferedImage,然后只显示 BufferedImage。