代码之家  ›  专栏  ›  技术社区  ›  Klopo22

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

  •  1
  • Klopo22  · 技术社区  · 3 年前

    我有这个代码,可以创建一些文本字段,我希望我的插入符号在按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) {
    
    }
    

    Image

    1 回复  |  直到 3 年前
        1
  •  1
  •   Hovercraft Full Of Eels    3 年前

    首先, 从不 向Swing文本组件添加KeyListener,因为这可能会对文本组件的固有功能产生不良的副作用。

    相反,如果您想捕获一个enter键,只需向JTextField添加一个ActionListener,因为这将由enter键触发。然后你可以打电话 .requestFocusInWindow() 在另一个JTextField上,这将把键盘焦点转移到新的JTextField上。