通过循环的JPanel(loop through JPanel)

2019-06-24 01:16发布

为了初始化所有JTextfField S于一个JPanel ,当用户点击“清除按钮”,我需要通过循环JPanel (而不是将所有个人场“”)。

我如何使用for-each循环,以循环访问JPanel寻找JTextField S'

Answer 1:

for (Component c : pane.getComponents()) {
    if (c instanceof JTextField) { 
       ((JTextField)c).setText("");
    }
}

但是,如果你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);
        }
    }
}

编辑:一种汤姆Hawtin样品- tackline的建议是在你的框架类列表:

List<JTextField> fieldsToClear = new LinkedList<JTextField>();

当你初始化各个文本字段,将它们添加到这个列表:

someField = new JTextField("Edit me");
{ fieldsToClear.add(someField); }

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

for (JTextField tf : fieldsToClear) {
    tf.setText("");
}


Answer 2:

而另一个答案显示了一个直接的方式来解决你的问题,你的问题是暗示较差的解决方案。

一般都希望层间静态依赖是一种方式。 你应该需要通过去一包getCommponents 。 铸造(假设仿制药)是一看就知道出了问题的简单方法。

所以,当你创建一个表单文本字段,将它们添加到列表中的清除操作被清除,以及将它们添加到面板。 当然,在实际的代码可能有其他事情要对他们做了。 在真正的代码,你可能要被处理的模型(可能是Document ),而不是JComponent秒。



文章来源: loop through JPanel