Java无限新对象

时间:2013-11-03 22:07:48

标签: java swing constructor containers infinite

所以我想要实现的是创建一个简单的程序,让用户在屏幕上创建矩形,然后移动它们。

我知道我可以在代码中声明一个新对象(即矩形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);
}
}

2 个答案:

答案 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遍历此集合,然后在迭代器上调用hasNextnext以查找所有元素。我确信这个简短的催眠会让人感到困惑,如果是这样的话,请查看Java Tutorial on Collections,它解释了你将需要的所有细节。