0

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

在此处输入图像描述

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






            }
        }
    }


}
4

2 回答 2

0

我怀疑红色矩形的坐标是这里的问题。尝试 afillRect(0,0,200,200)
它似乎被绘制在蓝色方块旁边并被剪掉JPanel或任何你JComponent的东西。

我强调,似乎

于 2013-10-23T19:25:56.010 回答
0

好吧,看看如何pintarTablero不做任何乱七八糟的事情,比如改变剪辑或其他东西,我的建议是改变这一行:

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

对此:

pintarTablero(g, tableroMio, 100, 200);

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

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

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

于 2013-10-23T22:33:18.360 回答