У меня есть JPanel
с 16 JTextfield
(4x4), я рисую их, используя цикл.
Теперь я хочу использовать клавиши со стрелками для перемещения фокуса с этого jtextfield на другой.
Как я могу это сделать?
Код (редактирование извлечено из ответа OP)
private JTextField[] characters;
public void drawWords() {
pnlWords.removeAll();
pnlWords.setLayout(new GridLayout(4, 4));
characters = new JTextField[4 * 4];
for (int i = 0; i < 4 * 4; i++) {
characters[i] = new JTextField();
characters[i].setHorizontalAlignment(JLabel.CENTER);
characters[i].setBackground(Color.LIGHT_GRAY);
characters[i].setFont(font);
characters[i].addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
charactersKeyTyped(evt);
}
});
pnlWords.add(characters[i]);
}
}
public void charactersKeyTyped(java.awt.event.KeyEvent evt) {
int key = evt.getKeyCode();
for (int i = 0; i < 4 * 4; i++) {
switch (key) {
case KeyEvent.VK_LEFT:
characters[i - 1].requestFocus();
break;
case KeyEvent.VK_RIGHT:
characters[i + 1].requestFocus();
break;
case KeyEvent.VK_UP:
characters[i - 4].requestFocus();
break;
case KeyEvent.VK_DOWN:
characters[i + 4].requestFocus();
break;
}
}
}
Вы можете создать массив всех ваших JTextFields и KeyAdapter для вашей панели. Если введенный ключ является правой клавишей, установите фокус на следующий JTextField в массиве. Если это левая клавиша, установите фокус на предыдущий JTextField. Рассмотрите разницу между прединкрестностью и постинкрементом в этом.