gpt4 book ai didi

java - Java 中基本监听器行为的问题

转载 作者:行者123 更新时间:2023-12-01 19:19:32 25 4
gpt4 key购买 nike

看到我有一点 Java 经验,不知道如何自己解决这个问题,这有点尴尬,但是到目前为止,除了使用 Java 进行 Web 编程之外,我从未真正做过任何其他事情。

我正在尝试创建一个向导,并尝试概括窗口中显示的字段的创建。因此,我无法直接控制实际组件 JTextField,而是处理更精细细节的包装类。不过,我想知道值何时更改,因此我添加了一个“addVetoableChangeListener”方法,该方法允许我将 VetoableChangeListener 注册到 JTextField 本身。

我已验证该方法是否已被调用,并且它是否将监听器传递到调试中的 JTextField。然而,什么也没有被调用。没有启动异常,并且实现接口(interface) VetoableChangeListener 的方法内的断点永远不会被调用。

有什么我没有得到的吗?监听器是否必须是某种组件才能正常工作,还是只需实现接口(interface)?也许我忽略了一个明显的错误,因为我已经专注于它太久了,我希望你们中的一个人能够明显地看出这一点。我正在尝试的一个更简单的版本是:

    public class TomcatConfigPanel extends WizardKeyValuePanel implements VetoableChangeListener {
protected void initPanel(JPanel mainPanel) {
addField("port", "8080");

IWizardField portField = getField("port");
portField.addVetoableChangeListener(this);
}

public void vetoableChange(PropertyChangeEvent evt)
throws PropertyVetoException {
// Stuff that would drive you Lovecraft insane if you saw what was written here
}
}

public class WizardTextField implements IWizardField {
private JLabel label;
private JTextField field;

public WizardTextField() {
// some initialization stuff ...
}

public void addVetoableChangeListener(VetoableChangeListener listener) {
field.addVetoableChangeListener(listener);
}
}

最佳答案

仅当 JTextField 上的constrained 属性发生更改时才会调用 VetoableChangeListener。受约束属性是其 setter 方法抛出 PropertyVetoException 的属性。因此,如果您的代码从未在 JTextField 上调用任何此类 setter 方法,则您的监听器将永远不会被调用。阅读 http://download.oracle.com/javase/tutorial/javabeans/properties/constrained.html了解更多详情。

我在 API 文档中的 JTextField(及其所有类层次结构)中没有找到任何受约束的属性,因此我怀疑是否可以调用您的监听器。

关于java - Java 中基本监听器行为的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4968385/

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