当我尝试在顶部涂有蓝色矩形的板上绘制矩形时,我看到矩形是在蓝色矩形下绘制的,但绘制红色矩形的方法是在红色矩形之后调用的。
@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);
}
}
}
}
答案 0 :(得分:0)
我怀疑红色矩形的坐标是这里的问题。试试fillRect(0,0,200,200)
它似乎被绘制在蓝色方块旁边并被截断JPanel
或JComponent
所有。
我强调,似乎。
答案 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方法。