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 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进行搜索,用于更复杂的操作,请参见我的编辑