3

我有我的课,我已经实施DocumentListener

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

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

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

4

5 回答 5

5

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

textField1.getDocument().addDocumentListener(new MyDocumentListener(textField1));
textField2.getDocument().addDocumentListener(new MyDocumentListener(textField2));
textField3.getDocument().addDocumentListener(new MyDocumentListener(textField3));
于 2013-05-18T16:11:51.343 回答
3

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

final JTextField field = new JTextField();

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

如果您需要对每个文本字段执行相同的操作,JB Nizet 的解决方案会更整洁。

于 2013-05-18T16:11:26.797 回答
0

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

有关更多信息,请参阅文档

于 2013-05-18T16:07:20.253 回答
0

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

于 2013-05-18T16:13:30.803 回答
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
      }
   }});
于 2013-05-18T16:14:00.280 回答