2011-09-14 110 views
0

我動態創建JTextField的情況下,我想知道是否有辦法來循環每一個和檢查它的價值有沒有辦法在java中循環動態創建組件?

是這樣的:

foreach(JTextField:jtf in JFrame) 
    System.out.prinlnt(jtf.getText()); 

編輯:

目前的方式我這樣做是創建一個數組列表:當我打電話createDynamic

private ArrayList<JTextField> txtFields = new ArrayList<JTextField>(); 

final JTextField txtDirPath = new JTextField(20); 
txtFields.add(txtDirPath); 

然後在我的按鈕,我有一個執行此動作:在這個名單

for (int i = 0; i < txtFields.size(); i++) { 
    String strPath = txtFields.get(i).getText(); 
    System.out.println(txtFields.size()); 
    System.out.println(strPath); 
} 

回答

1

只要把動態地創建他們當你的文本字段列表(java.util.List<JTextField>),以及循環:

for (JTextField jtf : theListOfTextFields) { 
    System.out.prinln(jtf.getText()); 
} 
+0

我嘗試這一點,但名單沒有給我正確的輸出,讓我張貼一些代碼。 –

+0

好吧,我有一些成功,現在它打印輸出兩次而不是一次。但它正在獲得正確的信息。 –

+0

真棒,讓它與我的邏輯工作。謝謝。 –

0

如果你不想在@JB Nizet建議的存儲列表中,你可以調用Container#getComponents來獲取所有子組件的數組。併爲每一個檢查它是否是一個JTextField

Component[] compArr = myFrame.getComponents(); 
for (Component comp : compArr) { 
    if (comp instanceof JTextField) { 
     System.out.prinlnt(((JTextField)comp).getText()); 
    } 
} 
1
for (Component c : jframe.getComponents()) { 
    if (c instanceof JTextField) 
     System.out.println(((JTextField)c).getText()); 
} 
+0

這隻會返回JFrame的直接子項。 JTextFields通常放在JFrame的內容窗格中,或放在內容窗格的子面板中。 –

+0

@JB Nizet你是對的,但它不是火箭科學添加遞歸:-)嚴重的是,我更喜歡動態查找,而不是保留一個列表的地方 - 承認味道無光澤 – kleopatra

0
for(Component c : myJFrame.getComponents){ 
    if (c instanceof JTextField){ 
     // do work here 
    } 
} 
+0

這隻會返回JFrame的直接孩子。 JTextFields通常放在JFrame的內容窗格中,或放在內容窗格的子面板中。 –

相關問題