如何将我的插入符号移动到另一个 JTextField

How can I move my caret on the other JTextField

我有这段代码可以创建一些文本字段,我希望我的插入符号在按 ENTER 后将其位置更改为另一个 JTextField。是否有可能做到这一点?在图片中,我举例说明了插入符转移应该如何工作。

class CaretMove extends JFrame implements KeyListener {
JTextField jTextField[] = new JTextField[3];
CaretMove(){
    setSize(300, 150);
    setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
    setLocationRelativeTo(null);
    Border border = BorderFactory.createLineBorder(null, 6);
    for (int i=0;i<3;i++) {
        jTextField[i] = new JTextField(10);
        jTextField[i].addKeyListener(this);
        jTextField[i].setBorder(border);
        add(jTextField[i]);
    }
    pack();
    setVisible(true);
}

@Override
public void keyTyped(KeyEvent e) {
}

@Override
public void keyPressed(KeyEvent e) {
    if (e.getKeyChar() == KeyEvent.VK_ENTER){
        JTextField jTextFiel = (JTextField)e.getSource();
        if ( jTextFiel == jTextField[2])
            e.setSource(jTextField[1]);
        else {
            e.setSource(jTextField[Arrays.asList(jTextField).indexOf(jTextFiel) + 1]);
            ((JTextField) e.getSource()).setText("meow"); //test meow
      
            ((JTextField) e.getSource()).setCaret(new MyCaret());
        }
    }
}

@Override
public void keyReleased(KeyEvent e) {

}

解决方案: 我添加了这些行:

e.setSource(jTextField[Arrays.asList(jTextField).indexOf(jTextFiel) + 1]);
((JTextField) e.getSource()).requestFocusInWindow();

第一行将我当前的文本字段对象设置为下一个,然后我select将其作为主要焦点。

首先,永远不要将 KeyListener 添加到 Swing 文本组件,因为这会对文本组件的固有功能产生不良副作用。

相反,如果您想捕获回车键,只需将 ActionListener 添加到 JTextField,因为这将由回车键触发。然后,您可以从此侦听器中的另一个 JTextField 调用 .requestFocusInWindow(),这会将键盘焦点转移到新的 JTextField。