【问题标题】:How to clear all textfield of jframe using loop?如何使用循环清除jframe的所有文本字段?
【发布时间】:2012-10-17 08:25:00
【问题描述】:

我正在使用 NetBeans 开发 Java 应用程序。我在JFrame 中有 5 个JTextFields 和 2 个JTextArea。我想使用循环一次清除它们。怎么办?

【问题讨论】:

  • 在 JFrame 上使用 .getContentPane().getComponents() 来获取其子项的数组。迭代该数组,并为每个项目检查instanceOf TextComponent,如果是,请调用setText(null)

标签: java swing jframe jtextfield jtextarea


【解决方案1】:

遍历所有组件并将所有JTextFieldJTextArea 对象的文本设置为空字符串:

//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
    }
}

【讨论】:

  • 我很抱歉含糊其辞。对 getComponents() 的调用应该在包含所有组件的 JPanel 上进行,而不是顶级 Frame,其 add(Component) 方法实际上将 Component 添加到嵌套在 JRootPane 内的 JPanel 中(因此它的 getComponents() 方法只会返回 JRootPane)。这个方法我已经测试过了,效果很好。
  • 没听懂。它不起作用,只返回 JRootPane。我已经在 J​​Frame 上尝试过这个......有什么建议吗? Component[] components = jframe.getRootPane().getComponents();
  • @qwfddq 正如我在上面的 cmets 中所解释的,您需要在已添加组件的容器上调用 getComponents()。这不应该是顶级框架。
【解决方案2】:

适当的代码应该是这个

    Component[] components = jframe.getContentPane().getComponents();
    for (Component component : components) {
        if (component instanceof JTextField || component instanceof JTextArea) {
            JTextComponent specificObject = (JTextComponent) component;
            specificObject.setText("");
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2022-11-09
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    相关资源
    最近更新 更多