DrawRectangle在图形下绘制矩形而不是结束

时间:2013-10-23 19:16:09

标签: java swing rectangles

当我尝试在顶部涂有蓝色矩形的板上绘制矩形时,我看到矩形是在蓝色矩形下绘制的,但绘制红色矩形的方法是在红色矩形之后调用的。

enter image description here

 @Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g); //To change body of generated methods, choose Tools | Templates.

    //this method paints the  blue board
    pintarTablero(getGraphics(), tableroMio, 100, 200);

   //red rectangle
   g.setColor(Color.red);
   g.drawRect(200, 200, 200, 200);
   g.fillRect(200, 200, 200, 200);
}


 public void pintarTablero(Graphics g, int tab[][], int x, int y) {


    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            if (tab[i][j] == 0) {
               // g.setColor(Color.blue);
                //g.fillRect(x + i * 30, y + j * 30, 30, 30);

               // g.setColor(Color.black);
                g.drawRect(x + i * 30, y + j * 30, 30, 30);






            }
        }
    }


}

2 个答案:

答案 0 :(得分:0)

我怀疑红色矩形的坐标是这里的问题。试试fillRect(0,0,200,200)
它似乎被绘制在蓝色方块旁边并被截断JPanelJComponent所有。

我强调,似乎

答案 1 :(得分:0)

很好地看到pintarTablero如何不做任何混乱,如更改剪辑或其他内容,我的建议是改变这一行:

pintarTablero(getGraphics(), tableroMio, 100, 200);

对此:

pintarTablero(g, tableroMio, 100, 200);

因为您会发现传递给paintComponent的Graphics对象与使用getGraphics返回的Graphics对象不同。如果您尝试将以下内容插入到paintComponent:

System.out.println(g == getGraphics());

您会发现它打印false,这种互动可能是您问题的根源。无论哪种方式,您都不应该在paintComponent中使用getGraphics方法。