I have this code that create some text fields and I want that my caret changes his position to the other JTextField after pressing ENTER. Is it possible to do this? In the picture, I gave an example of how caret transfer should work.
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) {
}
Solution: I added these lines:
e.setSource(jTextField[Arrays.asList(jTextField).indexOf(jTextFiel) + 1]);
((JTextField) e.getSource()).requestFocusInWindow();
The first line sets my current text field object to the next one, and then I select this as the main focus.
