【问题标题】:Get all JTextField by order按顺序获取所有 JTextField
【发布时间】:2013-09-10 03:51:45
【问题描述】:

我使用 Netbeans 创建带有许多 JTextField 元素的 GUI。我想遍历所有这些来调用setText,文本将只是 1、2、3 ...

private javax.swing.JTextField txt1;
private javax.swing.JTextField txt2;
private javax.swing.JTextField txt3;
private javax.swing.JTextField txt4;
private javax.swing.JTextField txt5;
private javax.swing.JTextField txt6;

我正在寻找一种方法来循环执行此操作,而不是为每个人手动调用setText。

可能是这样的:

public void getInfoJText2(){
    Component[] children = jPanel1.getComponents();
    for (int i = 0, j = 1; i < children.length; i++) {
        if (children[i] instanceof JTextField) {
            ((JTextField) children[i]).setText(Integer.toString(j++));
        }
    }
}

我该如何处理?

【问题讨论】:

    标签: java arrays swing jtextfield gettext


    【解决方案1】:

    使用 JTextField 的数组(或列表)并对其进行迭代。如果您不想摆脱拖放式 GUI(这是创建 GUI 的一种糟糕方式,因为您必须完全依赖 GUI 构建器),您仍然可以将文本字段放在数组。

    初始化文本字段后,创建一个可在 getInfoJText2() 方法中访问的数组,然后将对文本字段的引用放入数组中,即

    JTextField[] fields = new JTextField[6];  // Instance variable in the class
    
    public void initArray() {
        fields[0] = txt1;
        fields[1] = txt2;
        fields[2] = txt3;
        // etc.
    }
    

    然后您可以在 getInfoJText2() 方法中使用您的 fields -array 并且顺序将始终相同。

    【讨论】:

    • 但我使用 Netbean 并通过拖放创建所有 jtextfield。我不知道如何处理 jtextfield 手册。所以我用来创建数组 JTextField[]。然后我把 JTextField[0] = txt1,依此类推。有可能。但我想知道是否有办法让它更快
    • 您仍然可以将它们放在一个数组中。但是,如果设置文本是您对数组所做的唯一事情,那将不值得。
    • “但是我用的是Netbean和..” ..我是它的听话的仆人?是时候开始使用 IDE 而不是反过来了。
    • 谢谢。现在我知道你的意思了
    • @mKorbel 确实,我没有时间在这里写出建议的解决方案 :)
    【解决方案2】:
    public void getInfoJText2() throws IllegalArgumentException, IllegalAccessException {
        Field[] fields = jPanel1.getClass().getDeclaredFields();
        for(Field field : fields) {
            if(field.getName().contains("txt") && field.getType().getName().equals(JTextField.class.getName())) {
                JTextField jField = (JTextField)field.get(jPanel1);
                jField.setText(field.getName().substring(3));
                System.out.println(jField.getText());
            }
        }
    }
    

    你可以试试上面的核心。它使用反射

    【讨论】:

    • 反射是一个非常糟糕的替代品,可以通过列表/数组上的简单循环来实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-06
    • 2015-10-09
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多