2012-01-28 125 views
0

我在java中製作了一個Sudoku程序來學習一些算法,所以我希望用戶能夠輸入一個未解決的Sudoku難題。這裏是我到目前爲止,創建81(9×9)箱:需要幫助在JFrame中安排JTextField

JTextField input[] = new JTextField[80]; 
for(int i = 0; i <= 79; i++) 
{ 
    input[i] = new JTextField(); 
    input[i].setPreferredSize(new Dimension(30,30)); 
    f.getContentPane().add(input[i]); 
} 

當我雖然我得到的只是一個輸入字段運行此程序。我知道所有的文本字段,並初始化,創建並添加到jframe。我知道你必須弄亂這個佈局,但我不知道該怎麼做。任何幫助都是適當的。

回答

2

使用JPanelGridLayout

另外:

JTextField input[] = new JTextField[80]; 

這是80(不81)文本字段。

更新:(示例代碼)

public class SodokuBoardDemo { 

    public static void main(String... args) { 
     SudokuBoard board = new SudokuBoard();  
     JFrame frame = new JFrame("Sodoku"); 
     frame.add(board); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null);    
     frame.setVisible(true); 
    } 

    public static class SudokuBoard extends JPanel { 

     public SudokuBoard() { 
      setBorder(BorderFactory.createLineBorder(Color.GRAY)); 
      setLayout(new GridLayout(3, 3)); 
      BoardPart input[] = new BoardPart[9]; 
      for (int i = 0; i < 9; i++) { 
       input[i] = new BoardPart(); 
       add(input[i]); 
      } 
     } 

     public static class BoardPart extends JPanel { 

      public BoardPart() { 
       setBorder(BorderFactory.createLineBorder(Color.GRAY)); 
       setLayout(new GridLayout(3, 3)); 
       JTextField input[] = new JTextField[9]; 
       for (int i = 0; i < 9; i++) { 
        input[i] = new JTextField(); 
        input[i].setPreferredSize(new Dimension(30, 30)); 
        add(input[i]); 
       } 
      } 
     } 
    } 
} 
+0

謝謝,這真是棒極了,我只是我的循環之前添加此:f.setLayout(新的GridLayout(9,9)); – 2012-01-28 00:38:42

+0

也有一種方法,我可以將網格佈局細分爲9個3x3的盒子,所以它看起來有點苦澀? – 2012-01-28 00:39:37

+0

不需要。您需要使用多個JPanel。 – 2012-01-28 00:40:35

1

如果您不確定如何使用不同的Layout那兒是a great tutorial上的Oracle文檔。如果你想刷新組件本身,你也可以看看它們上面的tutorial。 :)

PS:這可能是我太困了,但它會出現,您已創建80個文本字段不是81