当前位置: 首页 > 面试题库 >

如何查找生成DocumentEvent的源组件

印成天
2023-03-14
问题内容

是否有可能发现哪个对象生成了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公共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");
    }
}


 类似资料:
  • 我有一个Maven插件,它为我的java项目生成源代码,并将它们放在“target/generated sources”文件夹中。我在编译时需要这些源代码。我想在我的项目中有它们,同时修改它,已经生成。当然,我想把它们放在“src”文件夹下的正确文件夹中,而不是放在“target/generated sources”文件夹中。我如何使用Maven来组织它? 换句话说,我希望能够: > 通过运行我的

  • 例外的是,我必须在这个库中创建一个通过JNDI查找jdbc数据源的新类。 为此,下面是我的代码: 所有上下文都没有问题地实例化了。但是当它查找jdbc数据源时,我有一个例外:在上下文中找不到名称jdbc 我们不是在一个webapp,这是一个问题吗?是否可以使用ResourceLink声明context.xml?怎么做? 注意:jndi是在server.xml(GlobalNamingResourc

  • 问题内容: 我想查看发送到PostgreSQL服务器的SQL命令,因为我需要检查它们是否正确。我特别对表创建命令感兴趣。 例如,ActiveRecord(Ruby)将其SQL语句打印到标准输出。Node.js / ActionHero.js和Sequelize.js也可能吗? 问题答案: 您可以在初始化sequelize时传递日志记录选项,该选项可以是函数或console.log。 如果只想查看表

  • 使用Lombok使用Eclipse/Maven生成代码。希望能够在文本中查看正在生成的类。在目标下四处搜寻,但什么也没看到。有没有办法让Lombok输出生成的类?

  • https://github.com/niltz/so-51090868-示例 当我使用maven在命令行上运行构建时,它似乎运行得很好,但当我将pom导入Spring工具套件时,我就发现了问题。

  • 给定两个数组,其中数组1包含变量,数组2包含变量的值,我希望得到这两个数组的所有可能组合,例如: 数组可以容纳尽可能多的变量,也可以容纳。 所需输出: 我尝试了一种递归方法: 我希望能够将每一行正确的内容保存为中的一个元素,但首先我想知道如何正确打印每一行。 编辑:第二个数组不是常量,它在每个变量之间不同: 显然,这在递归中行不通,因为我需要将每个数组与变量数组一起发送,我通过创建一个对象来实现这