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

时间:2015-04-21 01:46:04

标签: java jpanel graphics2d rectangles tetris

现在,我正在制作俄罗斯方块版本。为了测试我的Graphics类,我首先尝试绘制200个灰色方块(10x20),然后再担心绘制这块。我有两个名为myRectangles的二维数组(有坐标,高度,宽度)和myColors,它们存储每个方块的颜色。现在它只是所有Color.DARK_GRAY。

在我的构造函数中,我设置了这样的数组:

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);
 }

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

1 个答案:

答案 0 :(得分:0)

不要使用getGraphics()方法进行绘画。

自定义绘制是通过覆盖JPanel的paintComponent()方法完成的。然后将面板添加到框架中。

阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。