所以我想要实现的是创建一个简单的程序,让用户在屏幕上创建矩形,然后移动它们。
我知道我可以在代码中声明一个新对象(即矩形i =新矩形(x,y,sizex,sizey))但是这只会创建一个,而且它迫使我在代码中声明它: block1 =新块 block2 =新块 等
问题是:如何让用户创建无限长方形,使用一个按钮(不一定是按钮,它可以是任何东西),然后让用户能够对它们进行修改(位置/大小等)
示例会很好。我觉得有一种更好的方法,就是在代码中声明一大堆对象,然后逐个显示它们。在C ++中,我可以声明一个malloc可扩展容器,它只保存值,然后只显示使用这些值的东西,对java不确定。
简单的参考代码:
public static void main(String[] args){
JFrame frame = new JFrame("A.L.T.E.S");
//Container container = frame.getContentPane();
frame.setSize(1024, 768);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Block object = new Block(10,10,20,20);
frame.add(object);
object.reDraw();
}
public class Block extends JPanel{
int yPos;
int xPos;
int xSize;
int ySize;
public Block(int xPos, int yPos, int xSize, int ySize){
this.xPos = xPos;
this.yPos = yPos;
this.xSize = xSize;
this.ySize = ySize;
}
public void setYPos(int yPos){
this.yPos = yPos;
}
public void setXPos(int xPos){
this.xPos = xPos;
}
public void setXSize(int xSize){
this.xSize = xSize;
}
public void setYSize(int ySize){
this.ySize = ySize;
}
public int getYPos(){
return yPos;
}
public int getXPos(){
return xPos;
}
public int getYSize(){
return ySize;
}
public int getXSize(){
return xSize;
}
public void reDraw(){
repaint();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(xPos, yPos, xSize, ySize);
}
}
答案 0 :(得分:2)
Java中的任何内容都不简单。
首先,Java已经有一个Rectangle类,它保存Rectangle的原点和大小。在你的代码中,你将所有的矩形都变成蓝色。假设您希望用户设置Rectangle的颜色。您可以像这样定义您的Block类。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
public class Block {
private Color color;
private Rectangle rectangle;
public Block(int x, int y, int width, int height) {
this(new Rectangle(x, y, width, height));
}
public Block(Rectangle rectangle) {
this.rectangle = rectangle;
this.color = Color.BLUE;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public Rectangle getRectangle() {
return rectangle;
}
public void draw(Graphics g) {
g.setColor(getColor());
g.fillRect(rectangle.x, rectangle.y,
rectangle.width, rectangle.height);
}
}
接下来,您需要一个模型类来保存用户定义的所有块。
像这样的BlockList类。
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;
public class BlockList {
private List<Block> blockList;
public BlockList() {
this.blockList = new ArrayList<Block>();
}
public void init() {
this.blockList.clear();
}
public void addBlock(Block block) {
this.blockList.add(block);
}
public void draw(Graphics g) {
for (int i = 0; i < blockList.size(); i++) {
blockList.get(i).draw(g);
}
}
}
现在您已经定义了GUI模型,您将构建GUI。您的绘图JPanel将在BlockList类中调用draw方法。
我强烈建议您浏览Oracle tutorial on Swing。在尝试创建Swing GUI之前,请先阅读完整的教程。
答案 1 :(得分:0)
在java中,使用Collection
。在这种情况下,请使用List
。您可以创建ArrayList<Block>
,然后调用add
添加新的矩形。然后,您可以使用iterator
遍历此集合,然后在迭代器上调用hasNext
和next
以查找所有元素。我确信这个简短的催眠会让人感到困惑,如果是这样的话,请查看Java Tutorial on Collections,它解释了你将需要的所有细节。