我有一个textfield,当用户插入一定数量的字符时,程序应该将其放在JTable中并清除textfield,但是它会为Jtextfield.setText("");触发一个事件。
这是我的密码:
jTextField2.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
printIt();
}
@Override
public void removeUpdate(DocumentEvent e) {
}
@Override
public void changedUpdate(DocumentEvent e) {
}
private void printIt() {
//DocumentEvent.EventType type = documentEvent.getType();
String code=jTextField2.getText().trim();
// if(type.toString().trim().length()==13)
if (code.length()==4) {
list.add(code);
mod.addRow(new Object[]{code});
jTextField2.setText("");
}
}
});
}发布于 2013-10-04 19:58:52
要在使用DocumentListener时更新文本字段,需要将代码包装在SwingUtilities.invokeLater()中,以便在对文档进行所有更新之后执行代码。
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
jTextField2.setText("");
}
});发布于 2013-10-04 19:33:26
您不能在DocumentListener中修改textfield的加法。使用DocumentFilter修改文本。
文档侦听器不应该修改文档的内容;当通知监听器更改时,更改已经完成。相反,编写一个覆盖insertString或remove方法的自定义文档,或者两者都重写。
在另一个地方。
您可能希望在文档侦听器中更改文档的文本。但是,您不应该从文档侦听器中修改文本组件的内容。如果您这样做,程序可能会陷入僵局。相反,您可以使用格式化文本字段或提供文档筛选器。
https://stackoverflow.com/questions/19189288
复制相似问题