Java - 更改使用Graphics2D创建的某些正方形的颜色

时间:2015-11-19 04:48:59

标签: java colors graphics2d

我只是想创建一个100 x 100平方的简单游戏,每个方块是5个像素。

我创建了一个类:

public class Draw extends JComponent{
    private List<Graphics2D> recList = new ArrayList<Graphics2D>();
    public void paint(Graphics g) {
        //THIS TO SET (0,0) PANEL START AT BOTTOM LEFT
        Graphics2D g2 = (Graphics2D)g;
        AffineTransform at = g2.getTransform();
        at.translate(0, getHeight());
        at.scale(1, -1);
        g2.setTransform(at);

        //THIS TO DRAW ALL THE SQUARES
        for (int i = 0;i<100;i++){
            for (int j=0;j<100;j++){
                g2.setColor(Color.red);
                g2.drawRect(5*i, 5*j, 5, 5);
                recList.add(g2); //Store each square to the list to change the color
            }
        }
    }
}

然后我将它拖到netbeans的设计窗口,方块被涂上,看起来不错......

但似乎我做出了错误的举动。我第一次想要使用它们的位置从列表中获取特定的方块,但Graphic2d没有任何方法来获取位置(x和y)或更改颜色。

我不知道是否还有其他办法让它成真? PS:还有一件事,我可以将每个方块的位置设置到它的中心吗?

1 个答案:

答案 0 :(得分:1)

您可以创建自己的Tile课程,其中包含xywidthheightcolor等信息。每个Tile对象也可以负责绘画本身:

class Tile {
    private int x, y, width, height;
    private Color color;

    public Tile(int x, int y, int width, int height, Color color) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
        this.color = color;
    }

    public void paint(Graphics g) {
        g.setColor(color);
        g.fillRect(x, y, width, height);
    }
}

事先创建图块:

List<Tile> tiles = ...;

void createTiles() {
    for(int x = 0; x < 100; x++) {
        for(int y = 0; y < 100; y++) {
            Color color = ...; //choose color
            int size = 5;
            int tileX = x * size;
            int tileY = y * size;
            tiles.add(new Tile(tileX, tileY, size, size, color));
        }
    }
}

然后通过在paint方法中将图形对象传递给它们进行渲染:

void paint(Graphics g) {
    tiles.forEach(tile -> tile.paint(g));
}