将随机图形正方形添加到ArrayList(JAVA)
我想学习在java中与图形元素一起使用ArrayList 我有一个类可以创建具有随机x和随机y位置的正方形:将随机图形正方形添加到ArrayList(JAVA),java,swing,Java,Swing,我想学习在java中与图形元素一起使用ArrayList 我有一个类可以创建具有随机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(); p
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);
}
}
我有一个类,它创建了一个JFrame并向ArrayList添加了正方形元素。但我想不出来。我认为解决方案可能简单而技术性强,我只需要稍微推动一下
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);
}
}
import java.util.ArrayList;
导入javax.swing.JFrame;
公共类框架{
公共int宽度、高度;
公共字符串标题;
公共JFrame;
ArrayList squares=新的ArrayList();
公共框架(字符串标题、整数宽度、整数高度){
这个。宽度=宽度;
高度=高度;
this.title=标题;
显示();
}
公共空间显示(){
jframe=新的jframe();
jframe.setTitle(title);
jframe.setSize(宽度、高度);
jframe.setresizeable(false);
jframe.setDefaultCloseOperation(jframe.EXIT_ON_CLOSE);
jframe.setVisible(true);
jframe.setLocationRelativeTo(空);
对于(int i=0;i<20;i++){
添加(新的正方形());
}
jframe.add(正方形);
}
}
从我看到您正在做的事情来看,您正在向框架添加多个画布,这些画布将相互重叠
而是创建一个画布,其中包含在其绘制中绘制的正方形列表(x和y整数),然后将一个画布添加到框架中
另外,我不确定JFrame.add()是否会添加整个画布并调整其大小。而是使用layoutManager添加组件,如FlowLayout。
摆脱Square类并重新启动
- 不要让它扩展画布——您不希望不必要地混合AWT和Swing
- 您的Square类应该是逻辑类,而不是GUI类,这意味着它不应该扩展任何GUI组件
- 请勿在绘制方法中随机化
- 给你的平方类x和y整型字段
- 给它一个
方法,其中它使用传入的图形对象绘制自己public void draw(Graphics g)
- 创建另一个类,一个扩展JPanel的类,并给它一个
ArrayList
- 重写此JPanel的
方法paintComponent
- 在覆盖中,确保调用super的方法
- 在覆盖中,遍历数组列表,调用每个正方形的draw方法
- 将此JPanel放入JFrame中
JFrame.add(List)
方法)?此外,建议使用,例如JPanel
,而不是Canvas
。非常感谢您的帮助!