Java n个字符后的块文本写入
我有一段代码,在插入n个字符后“禁用”JTextField上的用户输入:Java n个字符后的块文本写入,java,swing,keylistener,jtextcomponent,documentfilter,Java,Swing,Keylistener,Jtextcomponent,Documentfilter,我有一段代码,在插入n个字符后“禁用”JTextField上的用户输入: JTextField tf = new JTextField(); tf.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { if (((JTextField) e.getSource()).getText().length() > n) { e.consume();
JTextField tf = new JTextField();
tf.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
if (((JTextField) e.getSource()).getText().length() > n) {
e.consume();
}
}
});
它可以工作,但我想知道是否有其他选择,因为我在一台旧的慢速计算机上尝试过,当我在文本字段中键入某个内容时,字母被添加,然后消失。。。我希望避免在用户输入后使用e.consume()
,而是直接阻止插入
可能吗
编辑
我忘了提到我只在这个例子中使用了
JTextField
,但是我希望这段代码能够与通用文本输入组件一起工作,比如JTextPane
,JTextArea
,等等您可以使用DocumentSizeFilter
类
这是为这种特殊用途而制造的:
有关如何在实现文档过滤器中执行此操作的教程部分:
public void insertString(FilterBypass fb,int offs,
字符串str,属性集a)
抛出BadLocationException{
如果((fb.getDocument().getLength()+str.length())这可能会有所帮助:似乎documentFilter是解决所有这些情况的方法。JTextPane支持文档,至于JTextArea:实现JTextComponent
接口的任何东西都有一个文档。如果特定文档支持setDocumentFilter(例如,如在抽象文档
)中,您可以使用此方法。
public void insertString(FilterBypass fb, int offs,
String str, AttributeSet a)
throws BadLocationException {
if ((fb.getDocument().getLength() + str.length()) <= maxCharacters)
super.insertString(fb, offs, str, a);
else
Toolkit.getDefaultToolkit().beep(); }