为了初始化所有JTextfField
S于一个JPanel
,当用户点击“清除按钮”,我需要通过循环JPanel
(而不是将所有个人场“”)。
我如何使用for-each循环,以循环访问JPanel
寻找JTextField
S'
为了初始化所有JTextfField
S于一个JPanel
,当用户点击“清除按钮”,我需要通过循环JPanel
(而不是将所有个人场“”)。
我如何使用for-each循环,以循环访问JPanel
寻找JTextField
S'
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("");
}
而另一个答案显示了一个直接的方式来解决你的问题,你的问题是暗示较差的解决方案。
一般都希望层间静态依赖是一种方式。 你应该需要通过去一包getCommponents
。 铸造(假设仿制药)是一看就知道出了问题的简单方法。
所以,当你创建一个表单文本字段,将它们添加到列表中的清除操作被清除,以及将它们添加到面板。 当然,在实际的代码可能有其他事情要对他们做了。 在真正的代码,你可能要被处理的模型(可能是Document
),而不是JComponent
秒。