Java JTextField:当textfield已满/autoskip/Auto Tabbing时,聚焦下一个组件
我想用JTextField实现autoskip,但不知道最好的方法是什么 什么是自动分页/自动分页?当您达到文本字段的定义长度限制时,将自动转到下一个字段。(如按Tab键,聚焦下一个组件)或此行为使用什么名称 我试过这个:Java JTextField:当textfield已满/autoskip/Auto Tabbing时,聚焦下一个组件,java,swing,jtextfield,Java,Swing,Jtextfield,我想用JTextField实现autoskip,但不知道最好的方法是什么 什么是自动分页/自动分页?当您达到文本字段的定义长度限制时,将自动转到下一个字段。(如按Tab键,聚焦下一个组件)或此行为使用什么名称 我试过这个: JTextField.getDocument.addChangeListener():比较长度和插入符号位置。 似乎可用,但我无法区分键入的用户输入和对JTextField.setText(String)的调用 当通过gui刷新更改文本时,不应更改焦点 您认为实现这一点的最佳
JTextField.getDocument.addChangeListener()
:比较长度和插入符号位置。
似乎可用,但我无法区分键入的用户输入和对JTextField.setText(String)
的调用
当通过gui刷新更改文本时,不应更改焦点
您认为实现这一点的最佳方式是什么?也许您希望改为使用组件。您仍然可以检查长度和插入符号位置,但它仅在按下/键入键时才会触发
您的代码可能类似于以下内容:
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);
}
在侦听器中,创建一个标志isAPI,以区分是否是您的代码调用setText()。在setText()调用之前将标志设置为true,并在调用之后将其重置 如果是真的,则什么也不做,并在相反的情况下移动焦点。请参阅 当通过gui刷新更改文本时,不应更改焦点 a) removeListener
b) setText
c) addListener 编辑:
如果您真的不喜欢需要ChainDocumentFilter的概念,那么就去掉对该类的所有引用。如果需要,可以用Toolkit.beep()替换provideErrorFeedback()方法调用。这无法正常工作,因为在处理此keyTyped事件时,文档尚未更新。我可以在长度中添加“1”,但这不包括粘贴操作(CTRL-V),因为长度已经正确。@Synox,是的,这就是我创建我引用的类的原因。一般来说,您不应该使用KeyListeners。它们与使用低级API的旧AWT应用程序一起使用。Swing更高级,具有更高级别的API,使生活更轻松。