当前位置: 首页 > 知识库问答 >
问题:

如何将DocumentListeners分配给JTextFields数组?

司空朝
2023-03-14

我在运行时通过“for循环”动态创建一个JTextFields数组。

我使用相同或等效的“for循环”将DocumentListener添加到每个文件中。在用户编辑这些JTextField的内容之后,应该执行的代码似乎是为每个JTextField/DocumentListener分别定义的。

问题:这不起作用,因为在用户操作之后执行的代码处于上一轮“for循环”结束时最后一次看到的状态。

int counter; // this is global, because otherwise needs to be final
JTextField[] a;

void calculate() {

    // ...the code sections that contains a = new JTextField[limit]; and
    // a[i] = new JTextField(); is omitted...

    for(counter = 0; counter < limit; counter++) {

        a[counter].getDocument().addDocumentListener(new DocumentListener() {

            public void insertUpdate(DocumentEvent e) {
                in = a[counter].getText(); 
                // this fails, because in the case of any text edits in any
                // of the JTextFields a[0...limit-1]
                // the code that executes is the one with counter = limit
            }


            public void removeUpdate(DocumentEvent e) {
                in = a[counter].getText(); // this fails
            }


            public void changedUpdate(DocumentEvent e) {
                in = a[counter].getText(); // obsolete
            }

        });

    }    

}

共有1个答案

慕容昊焜
2023-03-14

这是因为for循环完成后,counter=limit。

试试这样的东西:

int counter;    // this is global, because otherwise needs to be final

void calculate() {

    for (counter = 0; counter < limit; counter++) {

        a[counter].getDocument().addDocumentListener(
                new MyDocumentListener(counter)); 

    }
}

class MyDocumentListener implements DocumentListener {
    int counter;

    public MyDocumentListener(int counter) {
        this.counter = counter;
    }

    public void insertUpdate(DocumentEvent e) {
        in = a[counter].getText();
        // this fails, because in case of a text edit in any
        // of JTextFields
        // the code that executes is the one with counter = limit
    }

    public void removeUpdate(DocumentEvent e) {
        in = a[counter].getText();
    }

    public void changedUpdate(DocumentEvent e) {
        in = a[counter].getText();
    }
}
 类似资料:
  • 以前,我从android的文件夹中读取了一个json文件, 但是现在为null。请纠正我 错误日志是,

  • 问题内容: 假设我有一个功能 现在,我想将函数分配给一个名为的变量,这样,如果我使用,它将再次调用该函数。如果我只是做作业,它就会返回。 问题答案: 您根本不调用该函数。 括号告诉蟒蛇,你调用的函数,所以当你把它们放在那里,它调用的功能,并指定值 返回 的(在这种情况下)。

  • 问题内容: 我正在使用React使用渲染多个数据。 如何禁用列表中的单击按钮? 这是我的代码: 使用不起作用…我认为我无法添加状态,因为有多个按钮。 问题答案: 您应该使用而不是ref,并且是的,您需要多个ref,一个数组应该很好 根据文档: React支持可以附加到任何组件的特殊属性。ref属性具有一个功能,并且在 安装或卸载组件后立即执行。 在HTML元素上使用ref属性时,会 接收基础DOM

  • 问题内容: 在这篇文章中,我遇到了一些巧妙的代码,可以将Karl的Iterator转换为Stream 。我不得不承认我不完全理解如何在以下代码中将lambda分配给该类型… 我决定编写自己的小型测试,以确保它能够编译和执行。 我的理解是lambda 充当了供应商功能。 Iterable不是FunctionalInterface,因此如何为其分配lambda? 问题答案: 是 不是 “作为一个功能”

  • 我有两个超类(和),和一个子类。Dog类有一个所有者setter函数(。我在分配和抽象类类型时遇到问题。 阐明想法的代码示例: 假设我需要像这样使用这3个类,并且两个类具有相同的功能。我该怎么做?

  • 假设我正在从S3文件夹中读取100个文件。每个文件的大小为10 MB。当我执行<code>df=spark.read时。parquet(s3路径),文件(或更确切地说分区)如何在任务之间分布?E、 g.在这种情况下,<code>df</code>将有100个分区,如果spark有10个任务正在运行以将该文件夹的内容读取到数据帧中,那么这些分区是如何分配给这10个任务的?它是以循环方式进行的,还是每