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

时间:2013-05-18 16:03:53

标签: java swing documentlistener

我上课了,我实施了DocumentListener

public void removeUpdate( DocumentEvent arg0 ) {
   System.out.println( arg0.getDocument());
}

会打印javax.swing.text.PlainDocument@49ea903c

有没有可能的方法来获取对象,以便我可以获得更改的文本字段的值?目前我只有一个字段,所以我不需要检查,但如果我使用两个或更多字段,我怎么知道哪个JTextField通知了听众呢?

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

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

final JTextField field = new JTextField();

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

如果您需要为每个文本字段执行相同的操作,JB Nizet's solution将更整洁。

答案 2 :(得分:0)

您实际上正在获取PlainDocument对象。只需将其存储在变量中而不是打印它。

有关详细信息,请参阅docs

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您可以在不知道背景的情况下更新文档。

查阅javax.swing.event.DocumentEvent

的文档

这些方法与javax.swing.event.DocumentEvent.getDocument()检索到的文档相结合,允许您以适当的方式更新文档。稍后您可以添加其他文本字段而不做任何更改。

简单地在更改后获取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
      }
   }});