循环通过JPanel

5 java swing loops jpanel jtextfield

为了在用户单击"清除按钮"时初始化所有JTextfFields JPanel,我需要遍历JPanel(而不是将所有单个字段设置为"").

我怎样才能使用for-each循环来迭代JPanel搜索JTextFields?

aka*_*okd 16

for (Component c : pane.getComponents()) {
    if (c instanceof JTextField) { 
       ((JTextField)c).setText("");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是如果你有更深层嵌套的JTextFields,你可以使用以下递归形式:

void clearTextFields(Container container) {
    for (Component c : container.getComponents()) {
        if (c instanceof JTextField) {
           ((JTextField)c).setText("");
        } else
        if (c instanceof Container) {
           clearTextFields((Container)c);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:Tom Hawtin的示例- 提示建议是在您的帧类中有列表:

List<JTextField> fieldsToClear = new LinkedList<JTextField>();
Run Code Online (Sandbox Code Playgroud)

并在初始化单个文本字段时,将它们添加到此列表中:

someField = new JTextField("Edit me");
{ fieldsToClear.add(someField); }
Run Code Online (Sandbox Code Playgroud)

当用户点击清除按钮时,只需:

for (JTextField tf : fieldsToClear) {
    tf.setText("");
}
Run Code Online (Sandbox Code Playgroud)