我想知道如何在 java 中使用 DocumentListener/DocumentEvent 来防止用户删除 JTextField 中的特定文本部分,例如在 windows 命令提示符或 unix 终端上。它们显示当前工作目录,你可以' t 删除 > 或 $
谁能帮我?谢谢
我想知道如何在 java 中使用 DocumentListener/DocumentEvent 来防止用户删除 JTextField 中的特定文本部分,例如在 windows 命令提示符或 unix 终端上。它们显示当前工作目录,你可以' t 删除 > 或 $
谁能帮我?谢谢
在DocumentListener上使用 add 的问题在于,您无法恢复从侦听器中删除或编辑的部分,否则您将收到一个异常,指出您在收到通知时正在尝试修改内容。我知道的最简单的方法是继承一个Document,覆盖Document上的remove并将文本字段设置为使用该文档,如下面的示例所示:
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
public class Application {
private static final String PREFIX = "Your Input>";
private static final int prefixLength = PREFIX.length();
/**
* @param args
*/
public static void main(String[] args) {
JFrame rootFrame = new JFrame();
JTextField textField = new JTextField(new PromptDocument(), PREFIX, 20);
rootFrame.add(textField);
rootFrame.pack();
rootFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
rootFrame.setVisible(true);
}
private static class PromptDocument extends DefaultStyledDocument {
private static final long serialVersionUID = 1L;
@Override
public void remove(int offs, int len) throws BadLocationException {
if (offs > prefixLength - 1) {
int buffer = offs - prefixLength;
if (buffer < 0) {
len = buffer;
}
super.remove(offs, len);
}
}
}
}