我想用JTextField实现autoskip,但不知道最好的方法是什么。
什么是autoskip / Auto-Tabbing?达到文本字段的已定义长度限制后,将自动转到下一个字段。 (比如按下Tab键,关注下一个组件)或者你使用什么名称来表达这种行为?
我试过了:
JTextField.getDocument.addChangeListener()
:比较长度和插入位置。
似乎可用,但我无法区分键入的用户输入和JTextField.setText(String)
的调用。
当gui-refresh更改文本时,不应更改焦点。
您认为实施此方法的最佳方法是什么?
答案 0 :(得分:3)
或许您希望add a KeyListener
代替组件。您仍然可以检查长度和插入位置,但只有在按下/键入键时才会触发。
您的代码可能类似于以下内容:
addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e) {
if (getText().length() >= MAX_LENGTH) {
// Move the focus
}
}
});
编辑以回复评论:
我可能会建议使用@ camickr的建议:
private DocumentListener myTabChangeListener;
@Override
public void setText(String text) {
getDocument().removeDocumentListener(myTabChangeListener);
super.setText(text);
getDocument().addDocumentListener(myTabChangeListener);
}
答案 1 :(得分:1)
当gui-refresh更改文本时,不应更改焦点。
a)removeListener
b)setText
c)addListener
编辑:
如果您不喜欢需要ChainDocumentFilter的概念,那么请删除对该类的所有引用。如果需要,可以使用Toolkit.beep()替换provideErrorFeedback()方法调用。
答案 2 :(得分:0)
在你的监听器中创建一个标志isAPI来区分它是否是你的代码调用setText()。在setText()调用之前将标志设置为true,并在之后重置它。
什么都不做,并在相反的情况下移动焦点。