我上课了,我实施了DocumentListener
public void removeUpdate( DocumentEvent arg0 ) {
System.out.println( arg0.getDocument());
}
会打印javax.swing.text.PlainDocument@49ea903c
有没有可能的方法来获取对象,以便我可以获得更改的文本字段的值?目前我只有一个字段,所以我不需要检查,但如果我使用两个或更多字段,我怎么知道哪个JTextField
通知了听众呢?
答案 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
}
}});