如何将我的插入符号移动到另一个 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。
我有这段代码可以创建一些文本字段,我希望我的插入符号在按 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。