Java 如何使用循环清除jframe的所有文本字段?
我正在使用NetBeans开发Java应用程序。我在Java 如何使用循环清除jframe的所有文本字段?,java,swing,jframe,jtextfield,jtextarea,Java,Swing,Jframe,Jtextfield,Jtextarea,我正在使用NetBeans开发Java应用程序。我在JFrame中有5个JTextFields和2个JTextArea。我想使用循环立即清除它们。如何操作?迭代所有组件,并将所有JTextField和JTextArea对象的文本设置为空字符串: //Note: "this" should be the Container that directly contains your components //(most likely a JPanel). //This won't work if yo
JFrame
中有5个JTextFields
和2个JTextArea
。我想使用循环立即清除它们。如何操作?迭代所有组件,并将所有JTextField
和JTextArea
对象的文本设置为空字符串:
//Note: "this" should be the Container that directly contains your components
//(most likely a JPanel).
//This won't work if you call getComponents on the top-level frame.
for (Component C : this.getComponents())
{
if (C instanceof JTextField || C instanceof JTextArea){
((JTextComponent) C).setText(""); //abstract superclass
}
}
合适的代码应该是这个
Component[] components = jframe.getContentPane().getComponents();
for (Component component : components) {
if (component instanceof JTextField || component instanceof JTextArea) {
JTextComponent specificObject = (JTextComponent) component;
specificObject.setText("");
}
}
在JFrame上使用
.getContentPane().getComponents()
,以获取其子项的数组。迭代该数组,并对每个项检查TextComponent的instanceOf,如果是,请调用setText(null)
我很抱歉说得含糊不清。对getComponents()的调用应该在包含所有组件的JPanel上进行,而不是在顶层框架上,其add(Component)方法实际上将组件添加到JRootPane内部嵌套的JPanel中(因此其getComponents()方法将只返回JRootPane)。我已经测试过这个方法,效果非常好。没有得到它。它不工作,只返回JRootPane。我在JFrame上试过这个。。。有什么建议吗?Component[]components=jframe.getRootPane().getComponents()@qwfddq正如我在上面的注释中所解释的,您需要在已添加组件的容器上调用getComponents()
。这不应该是顶层框架。