【发布时间】:2013-05-21 13:47:10
【问题描述】:
我有这段代码,在插入 n 个字符后“禁用”JTextField 上的用户输入:
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 等通用文本输入组件一起使用
【问题讨论】:
-
看来 documentFilter 是处理所有这些情况的方法。 JTextPane 支持文档,对于 JTextArea:linuxquestions.org/questions/programming-9/…
-
任何实现
JTextComponent接口的东西都有一个文档。如果特定文档支持 setDocumentFilter(例如AbstractDocument),您可以使用此方法。 docs.oracle.com/javase/6/docs/api/javax/swing/text/….
标签: java swing keylistener jtextcomponent documentfilter