绘制未知数量的形状
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();
}
}
}
它显示了执行此操作的两种常用方法:
保留要绘制的对象的 ArrayList,然后在 paintComponent() 方法中遍历该列表。
直接绘制到 BufferedImage,然后只显示 BufferedImage。
该程序应该在用户单击的位置绘制圆圈。目前,它只绘制了 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();
}
}
}
它显示了执行此操作的两种常用方法:
保留要绘制的对象的 ArrayList,然后在 paintComponent() 方法中遍历该列表。
直接绘制到 BufferedImage,然后只显示 BufferedImage。