在我的应用程序中有四个 TextArea,我只想在一个文本区域中输入四个字符,光标会自动移动到下一个 TestArea。再次当我在此 TextArea 中输入四个字符时,光标再次自动移动到下一个 TextArea。
例子:在安装Window XP时需要“Key”,有四个部分,当你在第一部分输入四个字符时,光标自动移动到下一个部分。
我想在我的申请中做同样的事情。
为此,我首先添加了 CustomizedTextFields.jar,然后创建了四个 IntegerField:
private IntegerField text1;
private IntegerField text2;
private IntegerField text3;
private IntegerField text4;
在此之后,我在我的框架上显示所有这些 IntegerField。
现在我尝试使用此代码将光标发送到下一个字段,但它不起作用:
text1.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
int a2 = text1.getText().length();
if (a2 == 3) {
text2.getCursor();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
});
最佳答案
有趣的问题足以尝试提高我对文本包的模糊知识:-)
这里有两个独立的需求
- 限制文本的长度:这是通过 DocumentFilter 完成的,@mKorbel 已经指出
- 在达到最大长度后自动将焦点转移到下一个组件:事实证明这可以通过 NavigationFilter 完成
在代码中:
JComponent panel = new JPanel();
final int maxSize = 3;
for (int i = 0; i < 4; i++) {
final JTextField field = new JTextField(5);
NavigationFilter filter = new NavigationFilter() {
@Override
public void setDot(FilterBypass fb, int dot, Bias bias) {
if (dot >= maxSize) {
fb.setDot(0, bias);
field.transferFocus();
return;
}
fb.setDot(dot, bias);
}
@Override
public void moveDot(FilterBypass fb, int dot, Bias bias) {
if (dot >= maxSize) {
fb.setDot(0, bias);
field.transferFocus();
return;
}
fb.moveDot(dot, bias);
}
};
field.setNavigationFilter(filter);
((AbstractDocument) field.getDocument()).setDocumentFilter(new DocumentSizeFilter(maxSize));
panel.add(field);
}
documentFilter 是来自 Swing Tutorial 的那个
关于Java:光标如何自动从一个 TextField 移动到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9819238/