Java:光标如何自动从一个文本字段移动到另一个文本字段

Java:光标如何自动从一个文本字段移动到另一个文本字段,java,swing,awt,Java,Swing,Awt,在我的应用程序中,有四个文本区域,我只想在一个文本区域中输入四个字符,然后光标自动移动到下一个测试区域。当我在这个文本区域输入四个字符时,光标会自动移动到下一个文本区域 示例:在安装WindowsXP时,它需要“键”,当您在第一节中输入四个字符时,有四个节,然后光标自动移动到下一节 我想在我的申请中得到同样的东西 首先,我添加了CustomizedTextFields.jar,然后创建了四个IntegerField: private IntegerField text1; private Int

在我的应用程序中,有四个文本区域,我只想在一个文本区域中输入四个字符,然后光标自动移动到下一个测试区域。当我在这个文本区域输入四个字符时,光标会自动移动到下一个文本区域

示例:在安装WindowsXP时,它需要“键”,当您在第一节中输入四个字符时,有四个节,然后光标自动移动到下一节

我想在我的申请中得到同样的东西

首先,我添加了CustomizedTextFields.jar,然后创建了四个IntegerField:

private IntegerField text1;
private IntegerField text2;
private IntegerField text3;
private IntegerField text4;
在此之后,我在我的框架上显示所有这些整型字段

现在,我尝试使用以下代码将光标发送到下一个字段,但不起作用:

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) {
            }
        });

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

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


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

类似的操作应该可以:

text1.addKeyListener(new KeyAdapter(){
          public void keyPressed(KeyEvent e){
             String value=text1.getText();
             if(value.length()==4){
             text2.requestFocus();
          }
}
其中text2是下一个textfield

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.
  • 添加到
    JTextComponents
    ,用于收听添加

  • 对于
    JTextComponents
    ,不要使用
    KeyListener
    ,只使用
    DocumentListener

  • 如果有必要,将所需的next
    JTextArea
    添加到
    DocumentListener
    。将字符转换为
    JTextArea

  • 注意,将
    焦点
    从一个
    JTextArea
    移动到另一个
    invokeLater


  • 这是一个足够有趣的问题,可以帮助我提高对文本包的模糊认识:-)

    这里有两个单独的要求

    • 限制文本的长度:这是通过@mKorbel已经提到的DocumentFilter完成的
    • 在达到最大长度后自动将焦点转移到下一个组件:事实证明,这可以通过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);
    }
    
    JComponent panel=newjpanel();
    最终int maxSize=3;
    对于(int i=0;i<4;i++){
    最终JTextField=新的JTextField(5);
    NavigationFilter=新建NavigationFilter(){
    @凌驾
    公共无效设置点(FilterBypass fb、整型点、偏置){
    如果(点>=maxSize){
    fb.设定点(0,偏差);
    field.transferFocus();
    返回;
    }
    fb.设置点(点、偏差);
    }
    @凌驾
    公共无效移动点(FilterBypass fb、整型点、偏置){
    如果(点>=maxSize){
    fb.设定点(0,偏差);
    field.transferFocus();
    返回;
    }
    fb.移动点(点、偏置);
    }
    };
    field.setNavigationFilter(过滤器);
    ((AbstractDocument)field.getDocument()).setDocumentFilter(新DocumentSizeFilter(maxSize));
    面板。添加(字段);
    }
    

    documentFilter是来自

    的,只需创建文本区域并转到键类型事件 你可以写这个吗

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

    为了更快地获得更好的帮助,请发布一个。根本不要使用KeyListener。。。特别是对于验证文本输入,请参见@mKorbel'sanswer@Vinit维卡什,这就是你的答案question@kleopatra:+1用于导航筛选器。事实上,直到今天,我还不知道这个词:-)。仍在阅读这篇文章,感觉就像你说的那样,因为我希望有人能对此有更多的了解,这就是为什么我发布了答案,否则我从来都不想发布。但是,当我在
    导航过滤器
    中应用
    transferFocus()
    时,没有任何变化,所以如果可以的话,发布整个代码,我真的很感激。@GagandeepBali这就是全部代码-只需将它放入您最喜欢的框架中并运行它:-)现在它工作了,哈哈,上次它给了我各种各样的错误。只需一件事,将
    maxSize
    更改为4,因为OP需要4个字符。删除我的答案:-)