我有一个文本字段,当用户插入一定数量的字符时,程序应将其放在JTable中并清除文本字段,但它会触发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("");
}
}
});
}
答案 0 :(得分:6)
要在使用DocumentListener时更新文本字段,您需要将代码包装在SwingUtilities.invokeLater()中,以便在对Document完成所有更新后执行代码。
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
jTextField2.setText("");
}
});
答案 1 :(得分:4)
您无法在DocumentListener中修改文本字段的doucment。使用DocumentFilter
修改文字。
文档监听器不应修改文档内容;该 在听众收到通知时,更改已经完成 更改。相反,编写一个覆盖它的自定义文档 insertString或remove方法,或两者兼而有之。
在另一部分。
您可能希望在文档侦听器中更改文档的文本。 但是,您永远不应该修改文本组件的内容 在文档监听器中。如果你这样做,程序很可能会 僵局。 相反,您可以使用带格式的文本字段或提供 文件过滤器。