我创建了一个JTextField,并使用PlainDocument中的扩展类设置了setDocument属性。
当我从文本框中删除时,我想打印剩下的字符串,但它只打印了一步。
让我们说。如果JTextField有一个像123456789的字符串,我用退格键擦除一个字符,那么它打印正常(12345678)。但如果我删除让我们说“3”然后它显示“1234567”。所以我打印一个以前的值。如果我然后删除另一个字符,那么它将显示3被删除。 。只知道它知道长度发生了变化,并在后面打印了一个较少的字符。
如果我没有说清楚。我想打印文本字段从plainDocument代码中删除时的“真实”字符串。
当我删除它时会触发remove或removeupdate方法,当我的文本被打印时。 (可能是我提前一步打印)
PS:我必须从plaindocument获取值,而不是从外部的jtextfield获取。
这是我的代码
protected void removeUpdate(AbstractDocument.DefaultDocumentEvent evento)
{
try {
super.removeUpdate(evento);
removePostUpdate(evento);
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void removePostUpdate(AbstractDocument.DefaultDocumentEvent evento) throws BadLocationException
{
try {
palabraCompleta = evento.getDocument().getDefaultRootElement().getDocument().getText(0,evento.getDocument().getDefaultRootElement().getDocument().getLength()-1 );
System.out.println(evento.getPresentationName());
} catch (BadLocationException e) {
e.printStackTrace();
}
System.out.println(palabraCompleta);
}
答案 0 :(得分:3)
我使用默认文档复制了你对JTextField的所作所为。
首先,你的代码有一个错误 - 你使用长度 - 1而不是长度。还不确定你需要Document.getDefaultRootElement()。getDocument(),这对我来说似乎不对。
无论如何,我在下面创建的测试代码运行没有问题。鉴于我在您发布的代码中发现的错误,我会说如果实际上存在问题,那么您已经定制了一些您尚未在此处发布的内容
public static void testDocument () {
final JTextField tf = new JTextField();
tf.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void changedUpdate(DocumentEvent arg0) {
System.out.println(tf.getText());
try {
System.out.println("printing: " + arg0.getDocument().getDefaultRootElement().getDocument().getText(0,arg0.getDocument().getDefaultRootElement().getDocument().getLength()));
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void insertUpdate(DocumentEvent arg0) {
System.out.println(tf.getText());
try {
System.out.println("printing: " + arg0.getDocument().getDefaultRootElement().getDocument().getText(0,arg0.getDocument().getDefaultRootElement().getDocument().getLength()));
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void removeUpdate(DocumentEvent arg0) {
System.out.println(tf.getText());
try {
System.out.println("doc: " + arg0.getDocument().getDefaultRootElement().getDocument().getText(0,arg0.getDocument().getDefaultRootElement().getDocument().getLength()));
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
WindowUtilities.visualize(tf);
}