Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JFrame中创建矩形时无明显原因右移_Java_Arrays_Swing_Jframe - Fatal编程技术网

Java 在JFrame中创建矩形时无明显原因右移

Java 在JFrame中创建矩形时无明显原因右移,java,arrays,swing,jframe,Java,Arrays,Swing,Jframe,我正在尝试用2D数组为JFrame着色,以创建一个网格,用于学校项目的“地图”。 问题是,在帧的(0,0)位置,会出现一个随机的灰色框,将所有内容向右推。它甚至把最后一个街区推到下一行的第一个位置,这让我非常困惑 我考虑了数组以索引“0”开头的事实,我想知道为什么它没有在(0,0)位置绘制一个黑盒 以下是我的代码中的两个相关类: public class Floor1Components extends JComponent { public void paintComponent(Grap

我正在尝试用2D数组为JFrame着色,以创建一个网格,用于学校项目的“地图”。 问题是,在帧的(0,0)位置,会出现一个随机的灰色框,将所有内容向右推。它甚至把最后一个街区推到下一行的第一个位置,这让我非常困惑

我考虑了数组以索引“0”开头的事实,我想知道为什么它没有在(0,0)位置绘制一个黑盒

以下是我的代码中的两个相关类:

public class Floor1Components extends JComponent {
  public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;

    for (int y = 0; y < Map.floor1Schematics.length; y++) { //for every row

        for(int x = 0; x < Map.floor1Schematics[0].length; x++) {   //do something for every column
            Rectangle block = new Rectangle((x*50), (y*50), 50, 50);
            g2.draw(block);
            g2.fill(block);
            if(Map.floor1Schematics[y][x].equals("wl")) {
                g2.setColor(Color.BLACK);
            }
            if(Map.floor1Schematics[y][x].equals("gr")) {
                g2.setColor(Color.GREEN);
            }
            if(Map.floor1Schematics[y][x].equals("end")) {
                g2.setColor(Color.RED);
            }
            if(Map.floor1Schematics[y][x].equals("ch")) {
                g2.setColor(Color.YELLOW);
            }
            if(Map.floor1Schematics[y][x].equals("pv")) {
                g2.setColor(Color.GRAY);
            }
        }

    }   
}
}

为2D阵列的残暴行为道歉,该阵列用于着色和检测您所站的块。但我不明白为什么所有的东西都被推到右边,然后又被推到下面。我已经把块创建和索引引用的数学知识复习了一千遍。

我想你应该把

        g2.draw(block);
        g2.fill(block);
如果我没弄错的话,在你的背景色之后


对于第一个元素,您正在绘制一个框,然后设置颜色。如果有帮助,请告诉我。如果您有主方法代码,我愿意进一步提供帮助。

在绘制/填充矩形之前,您是否尝试过设置颜色,这很有效。非常感谢!我的天啊。非常感谢。我已经研究这个bug一周了,甚至对它进行了硬编码,这给我带来了更多的问题,所有这些都是因为这个。你能给我解释一下为什么会这样吗?我不想再犯同样的错误了。非常感谢。据我所知,它是这样的(例如使用真实世界的项目):默认情况下,你会拿起一支灰色的铅笔。如果你想画东西,它会用灰色来画。你需要选择你想用的正确颜色的铅笔,然后画你需要的。不太清楚它为什么是偏移量,但这需要对实际代码进行更多的调试。另外,您可能不需要g2.draw,只需要g2.fill。从我所看到的情况来看,偏移量似乎来自for循环的工作方式。如果它有助于解决问题,请联系我们。
        g2.draw(block);
        g2.fill(block);