2012-11-08 75 views
0

我有以下的Java代碼:的Java裏面搜索JFrames

JFrame frame = new JFrame(); 
frame.setTitle("Sudoku"); 
frame.setLocationRelativeTo(null); 
frame.setSize(500, 500); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.getContentPane().add(ruudustik.peaRuudustik()); //returns JPanel with textfields inside 
frame.setVisible(true); 

ruudustik.peaRuudustik功能:

public static JPanel peaRuudustik() { 
    JPanel panel = new JPanel(); 
    for (int i = 0; i < 81; i++) { 
     final JTextField ruut = new JTextField(); 
     ruut.setHorizontalAlignment(JTextField.CENTER); 
     ruut.setSize(30, 30); 
     ruut.setColumns(1); 
     ruut.setName(Integer.toString(i)); 
     panel.add(ruut); 
    } 
    return panel; 
} 

如何更改特定文本框的值。每個文本字段都有唯一的名稱。

+0

Textfield?哪裏?請發佈更多代碼。 – Aubin

+0

您可以嘗試使用[getComponents()](http://docs.oracle.com/javase/6/docs/api/java/awt/Container.html#getComponents())mehtod - 但是,我會勸阻這樣做。你可以訪問那些文本框的方式和方式非常有問題和不穩定。只需保留一個參考(對於Sudoku,參考的二維數組是完美的)。 – rlegendi

回答

0

你可以遍歷面板子,但我建議另一種方法 - 使用Map,例如:

Map<Integer, JComponent> textFields = new HashMap<Integer, JTextField>(); 
... 
textFields.put(i, ruut); 
ruut.setName(Integer.toString(i)); 
panel.add(ruut); 

然後,只需通過textFields.get(id);

+0

rlegendi的方法可能會更好,除非文本字段的數量是變量或文本字段標識符不是int –

+0

謝謝,完美的解決方案給我。 – henri17

0

訪問組件的JTextField名字是一個整數基於字符串的字符串,訪問它們的最簡單方法是使用像這樣的字段數組:

JTextField[] myTextFields = new JTextField[81]; 
for (int i = 0; i < myTextFields.length; i++) { 
    myTextFields[i] = new JTextField(); 
    myTextFields[i].setName(Integer.toString(i)); 
    ... 
}