2013-12-08 58 views
0

我想創建一個在java中使用fillrect函數的國際象棋棋盤。代碼似乎沒有工作,並且只添加了框架中的第一條語句。即使我刪除了for循環(可打印64個方格),並只有2添加語句,它仍然只打印第一them.Here的是代碼:在Java中建立國際象棋板

import javax.swing.* ; 
import java.awt.* ; 
public class ChessBoard extends JFrame { 
    private int i; 
    public ChessBoard(){ 
    setLayout(new GridLayout(8,8,0,0)); 
    // there are 64 squares 
    for(i=0; i<64 ;i++){ 

     if ((i % 2) == 0) //switches between black and white squares 
      add(new DrawRect("WHITE")); 
     else 
      add(new DrawRect("BLACK")); 

    } 
} 
} 
class DrawRect extends JPanel{ 
    private String ngjyra = "BLACK"; 
    public DrawRect(String b) { 
    ngjyra = b ; 

    } 

    @Override 
    protected void paintComponent (Graphics g){ 
     super.paintComponent(g); 
     if (ngjyra.equals("BLACK")) 
      g.setColor(Color.BLACK); 
     else 
       g.setColor(Color.WHITE); 
     g.fillRect(getX(), getY(), getWidth(), getHeight()); 
      //add the square with the specified color 

} 
} 
+0

「只添加框架中的第一條語句」是什麼意思?爲什麼不能爲單元格的JPanel調用setBackground()? – StanislavL

+0

如果我刪除循環,並作出2添加語句(黑色和白色Rect consistion)它只增加了框架的第一條語句。我正在讀一本書學習Java和它的一個練習,要求填寫。而我想解決這個特殊的問題。 – Lind

+0

與您的問題沒有關係,但爲什麼'DrawRect'不能直接保存'Color'?如果你絕對需要這種方式,爲什麼一個字符串,而不是一個枚舉或int? – JensG

回答

3

你的顯卡採用零相對座標在組件的左上角,所以繪製矩形的正確方法是

g.fillRect(0, 0, getWidth(), getHeight()); 

另外一個問題,你的顏色分配的代碼是這樣的,全黑和全時細胞做垂直條紋。改爲使用邏輯像

for (int row = 0; row < 8; row++) 
     for (int col = 0; col < 8; col++) { 
      boolean white = (col % 2 == 0) == (row % 2 == 0); 
      add(new DrawRect(white ? "WHITE" : "BLACK")); 
     } 
+1

感謝您的info.I有一個邏輯錯誤,在分配顏色的循環,我沒有正確使用fillrect.Thanks – Lind

2

你的問題與getX()getY(),他們返回相同的數值爲每你的DrawRect,所以他們將被繪製一個在另一個之上。你可以使用setBackground代替:

class DrawRect extends JPanel { 
    private Color ngjyra = Color.BLACK; 

    public DrawRect(Color color) { 
     ngjyra = color ; 
     setBackground(ngjyra); 
} 

但是你仍然有一個錯誤在你的循環邏輯,你會看到,如果你試試我上面貼的代碼。

+0

我不認爲你的想法是正確的。當我添加兩個statemens像add(新DrawRect(「WHITE」));添加(新的DrawRect(「BLACK」));它不會添加黑色方塊,而是添加一個白色方塊。這消除了將它們繪製成一個在另一個之上的想法。如果使用JPanel,則會使用setBackground ...我正在繪製矩形。 – Lind

+0

您的DrawRect類正在擴展一個JPanel。你可以使用setBackground來獲得相同的效果,而不用擔心繪製方法。 – PakkuDon

+0

正如我所說我想繪製矩形。這是練習所要求的。我必須使用繪畫方法。 – Lind