2013-12-23 53 views
2

因此,我使用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。所以當窗口調整大小時,網格將會擴大並且工作。但它會畫出奇怪的形狀(有時)。格柵單元具有8×8的大小不變

Normal shapeWeird shape

回答

2

下次使用修復:

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; 
     } 
    } 
} 
+0

工作,謝謝。 – Robban64

2

更改這個

for(int x = 0; x < 8; x++){ 
     for(int y = 0; y < 8; y++){ 

UPDATE:如果您想廣元時幀增加 使用

int cellWidth=getSize().width/8; 
int cellHeight=getSize().height/8; 

and

g2d.fillRect(cellWidth*x, cellHeight*y, cellWidth, cellHeight); 
+0

那樣只會讓電網有一定的大小。該錯誤仍然存​​在。 – Robban64