现在,我正在制作俄罗斯方块版本。为了测试我的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);
}
通常,当我运行代码时,它会错过第一列中的几个方块。当我使用调试器时,它显示正确。
答案 0 :(得分:0)
不要使用getGraphics()方法进行绘画。
自定义绘制是通过覆盖JPanel的paintComponent()方法完成的。然后将面板添加到框架中。
阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。