2011-09-14 108 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的内容窗格中,或放在内容窗格的子面板中。 –

相关问题