Java:游标如何自动从一个TextField移动到另一个TextField

时间:2012-03-22 09:14:20

标签: java swing awt

在我的应用程序中,有四个TextArea,我想在一个Text区域只输入四个字符,光标自动移动到下一个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) {
            }
        });

5 个答案:

答案 0 :(得分:10)

有趣的问题是尝试改进我对文本包的阴暗知识: - )

这里有两个单独的要求

  • 限制文本的长度:使用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

中的一个

答案 1 :(得分:6)

At the time of installing Window XP it want "Key" and there are four section 
when you enter four character in first section then cursor automatically move 
to the next section.
  1. DocumentListener添加到JTextComponents,以便收听DocumentFilter

  2. 不要将KeyListener用于JTextComponents,仅使用DocumentListener

  3. 将所需的下一个JTextArea添加到DocumentListener,如果有第4个类型的话。 Char JTextArea

  4. 请注意,将FocusJTextArea移动到另一个invokeLater将更好地包含在{{1}}

答案 2 :(得分:1)

text2.getCursor()替换为text2.requestFocus()

getCursor()用于在鼠标悬停在组件上时检索鼠标指针的形状。

此外,使用此方法,仍然可以在字段中输入4个以上的字符,例如通过从剪贴板粘贴。如果你想阻止它,你需要检查输入的文本是否超过4个字符,如果是,则只从中获取前4个字符。

答案 3 :(得分:1)

这样的事情应该有效:

text1.addKeyListener(new KeyAdapter(){
          public void keyPressed(KeyEvent e){
             String value=text1.getText();
             if(value.length()==4){
             text2.requestFocus();
          }
}

text2是你的下一个文本域

答案 4 :(得分:0)

只需创建textarea并转到键入的事件即可 你可以写这个

String number=jTextArea1.getText();
 int l=number.length();
 if(l==3){
 jTextArea1.transferFocus();

 }