Java - 带有嵌套循环的paintComponent

标签 java swing graphics 2d paintcomponent

我目前正在尝试用矩形绘制网格,但遇到一些问题。

我正在为不同类型的 SquareTypes 使用枚举类:

public enum SquareType
{
    EMPTY, OUTSIDE, I, O, T, S, Z, J, L
}

这些 SquareTypes 保存在包含 Board 类中的数组的数组中。然后,paintComponent——它应该绘制我的网格——通过使用以下方法进入并获取这些对象:

public SquareType getCell(int width, int height) {
    return squares[width][height];

但是,现在当我们到达 paintComponent 时:

   public void paintComponent(Graphics g) {
       super.paintComponent(g);
       final Graphics2D g2d = (Graphics2D) g;

       EnumMap<SquareType, Color> dictionary = new EnumMap<SquareType, Color>(SquareType.class);
       dictionary.put(SquareType.EMPTY, Color.BLACK);
       dictionary.put(SquareType.I, Color.LIGHT_GRAY);
       dictionary.put(SquareType.J, Color.ORANGE);
       dictionary.put(SquareType.L, Color.BLUE);
       dictionary.put(SquareType.O, Color.YELLOW);
       dictionary.put(SquareType.OUTSIDE, Color.BLUE);
       dictionary.put(SquareType.S, Color.GREEN);
       dictionary.put(SquareType.T, Color.CYAN);
       dictionary.put(SquareType.Z, Color.RED);

       for (int i = 0; i < game.getHeight(); i++) {
           for (int j = 0; j < game.getWidth(); j++) {
               g2d.setColor(dictionary.get(game.getCell(j,i)));
               g2d.drawRect(0, 0, 52 * j, 52 * i);

           }
       }
   }

}

问题是 paintComponent 将每个正方形绘制为蓝色,但是如果我使用 getCell() 方法并检查实际单元格内的内容,我可以清楚地看到有不同的 SquareTypes

还可以补充一点,程序绘制的第一个矩形应该始终是蓝色的。所以在我看来,好像它开始用蓝色绘画,然后一直坚持下去?这是为什么?

我对编程语言非常陌生,希望得到任何帮助。

最佳答案

线路

g2d.drawRect(0, 0, 52 * j, 52 * i);

显然是错误的。方法描述如下:

drawRect(int x, int y, int width, int height)

因此,您的线条在所有先前绘制的矩形之上绘制了一个矩形。这就是为什么你的最终结果是一个大的蓝色矩形。

我认为应该是这样的:

g2d.drawRect(j * 52, i * 52, 52, 52);

关于Java - 带有嵌套循环的paintComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21952475/

相关文章:

java - 如何上传 bufferedImage 而不将其存储在用户系统中?

java - 将 JTextField 输入保存到文本文件

java - JLabel 不会更新/显示。初始化问题?

c++ - glDrawElements 中的索引参数是什么意思?

graphics - 什么是 vulkan 颜色空间?

Java 图形在计时器中不工作

java - java中如何从文件名中选取特定位置

java - 用于测试的 hibernate 配置 -(新手哇)

java - Jsoup简单的HTML标签分割

java - 如何获取模型的所有公共(public)方法?