所以我使用graphics2d 在 JPanel 上绘制网格。
但是当我调整窗口大小时,它会以奇怪的结果结束。
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
/*
* Draw the background
*/
boolean isWhite = false;
for(int x = 0; x < getSize().width/8; x++){
for(int y = 0; y < getSize().height/8; y++){
if(isWhite){
g2d.setColor(Color.white);
isWhite = false;
}else{
g2d.setColor(Color.LIGHT_GRAY);
isWhite = true;
}
g2d.fillRect(8*x, 8*y, 8, 8);
}
}
g2d.dispose();
}
因此,它不会绘制 8x8 正方形,而是绘制水平矩形 (getSize().width()x8)。
更新
我正在绘制一个将填充整个 JPanel 的网格。因此,当窗口大小调整时,网格将扩展并且有效。但它会画出奇怪的形状(有时)。网格单元的大小恒定为 8x8
最佳答案
使用下一个修复:
boolean isWhite = false;
boolean isWhiteLastLine = isWhite;
for(int x = 0; x < getSize().height; x=x+8){
for(int y = 0; y < getSize().width; y=y+8){
if(y == 0){
isWhiteLastLine = isWhite;
}
if(isWhite){
g2d.setColor(Color.white);
}else{
g2d.setColor(Color.LIGHT_GRAY);
}
g2d.fillRect(y, x, 8, 8);
isWhite = !isWhite;
if(y+8 >= getSize().width){
isWhite = !isWhiteLastLine;
}
}
}
关于java - Swing 绘制网格。奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20743766/