gpt4 book ai didi

java - 如何将 DocumentListeners 分配给 JTextFields 数组?

转载 作者:行者123 更新时间:2023-11-30 07:16:27 25 4
gpt4 key购买 nike

我在运行时通过“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
}

});

}

}

最佳答案

因为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();
}
}

关于java - 如何将 DocumentListeners 分配给 JTextFields 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16969251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com