Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从DocumentListener(DocumentEvent)获取源对象?_Java_Swing_Documentlistener - Fatal编程技术网

Java 如何从DocumentListener(DocumentEvent)获取源对象?

Java 如何从DocumentListener(DocumentEvent)获取源对象?,java,swing,documentlistener,Java,Swing,Documentlistener,我有我的类,我已经实现了DocumentListener public void removeUpdate( DocumentEvent arg0 ) { System.out.println( arg0.getDocument()); } 它将打印javax.swing.text。PlainDocument@49ea903c 是否有任何可能的方法获取对象,以便获取更改的文本字段的值?目前我只有一个字段,因此不需要检查,但如果我使用两个或更多字段,我如何知道哪个JTextField通知了

我有我的类,我已经实现了
DocumentListener

public void removeUpdate( DocumentEvent arg0 ) {
   System.out.println( arg0.getDocument());
}
它将打印
javax.swing.text。PlainDocument@49ea903c


是否有任何可能的方法获取对象,以便获取更改的文本字段的值?目前我只有一个字段,因此不需要检查,但如果我使用两个或更多字段,我如何知道哪个
JTextField
通知了侦听器?

您实际上得到的是
PlainDocument
对象。只需将其存储在变量中,而不是打印它


有关更多信息,请参见。

一个选项是使用内部类,这将为您提供引用文本字段的机会

final JTextField field = new JTextField();

field.getDocument().addDocumentListener(new DocumentListener() {
  // Here you can reference 'field' in your methods
});

如果您需要对每个文本字段执行相同的操作,将更加整洁。

我不确定是否可以从文档中获取swing组件。但问题很容易解决:只需在每个文本字段中添加不同的侦听器实例,并将文本字段存储在侦听器本身中

textField1.getDocument().addDocumentListener(new MyDocumentListener(textField1));
textField2.getDocument().addDocumentListener(new MyDocumentListener(textField2));
textField3.getDocument().addDocumentListener(new MyDocumentListener(textField3));

您需要做的是将文档列表器添加到您需要的每个组件中。如果您确实需要知道哪些文本字段text已经更改,那么您可以在文档列表器中拥有一个属性textFieldName或其他内容,您可以在为其创建文档列表器时进行设置。但我认为您最好改变您的做法。它听起来不太好。

您可以在不了解上下文的情况下更新文档

查阅以下文件:

  • 返回更改开始时文档内的偏移量
  • 返回更改的长度
这些方法与通过检索的文档相结合,允许您以适当的方式更新文档。稍后,您可以添加其他文本字段而不做任何更改

要在更改后获取JTextField的文本,请执行以下操作:

JTextField myTf = new ...; // maybe an attribute definition
...
myTf.addActionListener(
   new ActionListener(){@Override public void actionPerformed( ActionEvent e ) {
      JTextField tf = (JTextField)e.getSource();
      System.out.println( tf.getText());
      if( tf == myTf ) { // == for reference comparison
         ... // do something dedicated to myTf
      }
   }});

是的,我知道这一点,我希望我的代码更干净,就像你可以在ActionListener上使用event.getSource()。。谢谢你的回答。找到好的替代方案了吗?在我提出问题之前,我已经查阅了好几次文档,但我不知道getOffset()或GetLength()对我有什么帮助。我想在更改后获取字段中的文本,而不是长度,因为我将根据DocumentListener进行搜索,用于更复杂的操作,请参见我的编辑