gpt4 book ai didi

java - 如何找到生成 DocumentEvent 的源组件

转载 作者:太空狗 更新时间:2023-10-29 22:50:45 27 4
gpt4 key购买 nike

是否有可能发现哪个对象生成了 DocumentEvent?像我可以用 ActionListener 做的事情:

JTextField field = new JTextField("");
field.addActionListener(actionListener);

//inside ActionListener
public void actionPerformed(ActionEvent arg0) {
if (arg0.getSource() instanceof JTextField) //true

}

我想对 DocumentEvent 做同样的事情,但似乎不是以同样的方式工作:

JTextField field = new JTextField("");
field.getDocument.addDocumentListener(documentListener);
//inside documentListener
public void insertUpdate(DocumentEvent){
if (arg0.getSource() instanceof JTextField) //false: class is javax.swing.text.PlainDocument
if (arg0.getSource() instanceof MyComponent){
MyComponent comp = (MyComponent)arg0.getSource();
comp.callSpecificMethodUponMyComp();
}
}

回答者应考虑以下几点:

  1. 为了我的目的,知道生成事件的对象类型是不够的,但我需要在运行时引用它。
  2. 通常,事件是从 swing 对象(myComp 公共(public) JTextField)的扩展中生成的。这些对象存储应在运行时在监听器方法(即 insertUpdate)中检索的附加信息
  3. DocumentListener 是从一个不知道生成事件的字段的类中实现的。不同类型的不同字段可以在运行时附加到监听器。

最佳答案

您可以在文档中设置一个属性来告诉您文档属于哪个文本组件:

例如:

final JTextField field = new JTextField("");
field.getDocument().putProperty("owner", field); //set the owner

final JTextField field2 = new JTextField("");
field2.getDocument().putProperty("owner", field2); //set the owner

DocumentListener documentListener = new DocumentListener() {

public void changedUpdate(DocumentEvent documentEvent) {}

public void insertUpdate(DocumentEvent documentEvent) {

//get the owner of this document
Object owner = documentEvent.getDocument().getProperty("owner");
if(owner != null){
//owner is the jtextfield
System.out.println(owner);
}
}

public void removeUpdate(DocumentEvent documentEvent) {}

private void updateValue(DocumentEvent documentEvent) {}
};

field.getDocument().addDocumentListener(documentListener);
field2.getDocument().addDocumentListener(documentListener);

或者:

获取引发事件的文档并将其与文本字段的文档进行比较。

例子:

public void insertUpdate(DocumentEvent documentEvent) {
if (documentEvent.getDocument()== field.getDocument()){
System.out.println("event caused by field");
}
else if (documentEvent.getDocument()== field2.getDocument()){
System.out.println("event caused by field2");
}
}

关于java - 如何找到生成 DocumentEvent 的源组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218731/

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