2012-11-01 126 views
1

所以我試圖創建一個tictactoe板,但它不顯示任何東西。 (有一個主類,但它只是創建一個「GameBoard」)JFrame沒有輸出?

任何幫助將不勝感激,謝謝你提前。

所以我加了組件都不敢相信我忘記了,我一定很累。

但是現在我所得到的只有一個紅色正方形。

public GameBoard() 
    { 

     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setBounds(0, 0, 195, 215); 
     frame.setSize(new Dimension (300, 400)); 
     int count = 1; 
     Rectangle board[][] = new Rectangle[3][3]; 


     for (int row = 0; row < board.length; row++){ 
      for (int col = 0; col < board[row].length; col++){ 
       if (count == 2){ 

       board[row][col] = new Rectangle(1,1,1,1); 
       board[row][col].setBackground(Color.RED); 
       frame.add(board[row][col]); 
       count--; 
      } else {board[row][col] = new Rectangle(1,1,1,1); 
        board[row][col].setBackground(Color.BLACK); 
        frame.add(board[row][col]); 
        count++; 
       } 
      }} 
     frame.pack(); 
     frame.setVisible(true); 
}} 

Rectangle類:

public class Rectangle extends JComponent { 


    public Rectangle(int x, int y, int w, int h) { 
     super(); 
     setBounds(x, y, w, h); 
     setBackground(Color.black); 
    } 


    public void paint(Graphics g) { 
     g.setColor(getBackground()); 
     g.fillRect(0, 0, getWidth()-1, getHeight()-1); 
     paintChildren(g); 
    } 

}

+0

Rectangle中沒有setBackground()方法。矩形是你自己的班級嗎? – whiskeyspider

回答

1

從邏輯上講,你缺少的步驟,以實際添加的板到你的JFrame:

frame.add(...); 
在for循環

,所以你要創建JFrame和Rectangles,但是不要將矩形添加到JFrame中。

由於@AmitD指出,JFrame.add()不接受矩形,因此您需要編寫一個擴展JComponent的類來在其paintComponent()方法內繪製矩形。

爲了解決顯示問題(只看到紅色):

你需要設置一個佈局管理器爲您JFrame;我認爲GridLayout將是最合適你的情況:

... 
JFrame frame = new JFrame(); 
frame.setLayout(new GridLayout(3,3)); 
... 
+1

框架不接受矩形對象 –

+0

@AmitD好點;固定。 –

+0

與課程編輯和該程序的另一個問題。 – user1719605

0

您創建一個空的JFrame,並創造了一堆你存儲到一個數組矩形的,但你從來沒有在任何地方畫畫,所以框架保持爲空。

您需要在JComponent上繪製這些矩形(通過覆蓋它的paintComponent()方法),並將此JComponent添加到框架。

編輯:作爲@whiskeyspider筆記,標準Rectangle類中沒有setBackground()方法。因此,如果Rectangle是您的類,並且是JComponent的子類,則需要將Rectangle的實例添加到框架。

+0

編輯與類和程序的另一個問題。 – user1719605

+0

重寫的方法是'paintComponent()'。不是'paint()'。你需要讓你的Rectangle返回它的首選大小,並使用佈局管理器(想到一個GridLayout)來佈局框架。實際上,它使用BorderLayout,並且所有內容都位於框架的中心。 –