我想学习将ArrayList与java中的图形元素一起使用。
我有一个用随机x和随机y位置创建正方形的类:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
public class Square extends Canvas {
public int x, y;
Random r = new Random();
public void paint(Graphics g) {
x = r.nextInt(640);
y = r.nextInt(480);
g.setColor(Color.BLACK);
g.fillRect(x, y, 30, 30);
}
}
我有一个类,它为ArrayList创建一个JFrame和Add square元素。但我无法弄明白。我认为解决方案可能很简单和技术性,我只需要轻微推动。
import java.util.ArrayList;
import javax.swing.JFrame;
public class Frame {
public int width, height;
public String title;
public JFrame jframe;
ArrayList<Square> squares = new ArrayList<Square>();
public Frame(String title, int width, int height) {
this.width = width;
this.height = height;
this.title = title;
display();
}
public void display() {
jframe = new JFrame();
jframe.setTitle(title);
jframe.setSize(width, height);
jframe.setResizable(false);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setVisible(true);
jframe.setLocationRelativeTo(null);
for(int i = 0; i < 20; i++) {
squares.add(new Square());
}
jframe.add(squares);
}
}
答案 0 :(得分:2)
摆脱Square类并重新启动。
public void draw(Graphics g)
方法,使用传入的Graphics对象绘制自己。ArrayList<Square>
。paintComponent
方法。答案 1 :(得分:0)
从我看到你正在做的事情,你正在为相互重叠的画面添加多个画布。
而是创建一个画布,其中包含在其绘画中绘制的Squares(x和y int)列表,然后向该帧添加一个画布。
此外,我不确定JFrame.add()是否会添加整个画布并调整其大小。而是使用layoutManager添加像FlowLayout这样的组件。 Layout managers