Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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 当我在JPanel中绘制矩形时,并非所有矩形都显示出来。为什么第一列中的某些矩形不显示?_Java_Jpanel_Graphics2d_Rectangles_Tetris - Fatal编程技术网

Java 当我在JPanel中绘制矩形时,并非所有矩形都显示出来。为什么第一列中的某些矩形不显示?

Java 当我在JPanel中绘制矩形时,并非所有矩形都显示出来。为什么第一列中的某些矩形不显示?,java,jpanel,graphics2d,rectangles,tetris,Java,Jpanel,Graphics2d,Rectangles,Tetris,现在,我正在制作俄罗斯方块的一个版本。为了测试我的图形课,在我开始画这幅作品之前,我先尝试画200个10x20的灰色正方形。我有两个称为myRectangles的2D数组,其中包含坐标、高度、宽度和MyColor,用于存储每个正方形的颜色。现在全是颜色,深灰色 在我的构造函数中,我设置了如下数组: for(int i = 0; i < width; i++) { for(int j = 0; j < height; j++) { myColor

现在,我正在制作俄罗斯方块的一个版本。为了测试我的图形课,在我开始画这幅作品之前,我先尝试画200个10x20的灰色正方形。我有两个称为myRectangles的2D数组,其中包含坐标、高度、宽度和MyColor,用于存储每个正方形的颜色。现在全是颜色,深灰色

在我的构造函数中,我设置了如下数组:

for(int i = 0; i < width; i++)
  {
     for(int j = 0; j < height; j++)
     {
        myColors[i][j] = Color.DARK_GRAY;
        myRectangles[i][j] = new Rectangle2D.Double(INITIAL_X + (i * SQUARE_SIDE),
                                           INITIAL_Y + (j * SQUARE_SIDE),
                                           SQUARE_SIDE, SQUARE_SIDE);
     }
  }
然后,我有一个单独的drawBoard方法,因为当我真正开始在黑板上绘制作品时,我希望能够多次调用它。该方法类似于以下注释:我在该方法中有一些测试代码:

public void drawBoard()
{
  Graphics g = myGame.getGraphics();
  Graphics2D g2 = (Graphics2D) g;

  int counter = 0;
  for(int i = 0; i < TetrisBoard.MAX_WIDTH; i++)
  {
     for(int j = 0; j < TetrisBoard.MAX_HEIGHT; j++)
     {
        g2.setPaint(myColors[i][j]);
        g2.fill(myRectangles[i][j]);
        System.out.println(counter);
        System.out.println("Drawing rectangle at " + myRectangles[i][j].getX() + " " + myRectangles[i][j].getY());
        System.out.println("Color " + myColors[i][j]);
        System.out.println();
        counter++;
     } 
  }
  System.out.println(counter);
  myGame.setVisible(true);
  myWindow.setVisible(true);
 }

通常,当我运行代码时,它会遗漏第一列中的几个方块。使用调试器时,它会正确显示。

不要使用getGraphics方法进行绘制

自定义绘制是通过重写JPanel的paintComponent方法来完成的。然后将面板添加到框架中

有关更多信息和工作示例,请阅读上Swing教程的部分