1

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

我知道我可以在代码中声明一个新对象(即矩形 i = new rectangle(x,y,sizex,sizey))但是这只会创建一个,而且它迫使我在代码中声明它:block1 = new块块2 =新块等

问题是:如何让用户使用让我们说一个按钮(不一定是按钮,它可以是任何东西)来创建无限矩形,然后让用户能够修改它们(位置/大小等)。

例子会很好。我只是觉得有比在代码中声明大量对象然后一个一个显示它们更好的方法。在 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);
}
}
4

2 回答 2

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 方法。

我强烈建议您阅读有关 Swing 的 Oracle 教程。在尝试创建 Swing GUI 之前,请先阅读完整的教程。

于 2013-11-04T03:01:59.507 回答
0

在 java 中,使用Collection. 在这种情况下,使用List. 您可以创建一个ArrayList<Block>,然后调用add以添加新的矩形。iterator然后,您可以使用,然后在迭代器上调用hasNext和来遍历此集合,next以查找所有元素。我确信这个简短的催眠会让人感到困惑,如果是这样,请查看Java 集合教程,它详细解释了您需要的所有内容。

于 2013-11-03T22:19:27.917 回答