2015-07-29 4 views
0

Я создал простую java swing приложение. Теперь в моем JPanel у меня есть JTextField и один JTable. Итак, я реализовал свой собственный фокус, если фокус находится на JTextFiled1, и я нажимаю ENTER, фокус автоматически изменяется на JTextFiled2 и т. Д. Последний элемент, получающий фокус, - JTable. Теперь я не хочу, что фокус находится на первом столбце, а на четвертом столбце, поэтому у меня есть этот код:Как можно сфокусироваться на JTable?

textDescrizione.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "myTabAction"); 
textDescrizione.getActionMap().put("myTabAction", new AbstractAction("myTabAction") { 
    public void actionPerformed(ActionEvent e) { 
     tableConti.requestFocus(); 
     tableConti.editCellAt(0,4); 
    } 
}); 

этот код работает, у меня есть фокус на моем Fouth клетке, но если я пытаюсь чтобы нажать правую кнопку на моей клавиатуре, фокус не состоит из пяти столбцов, а в первом столбце. Как я могу это изменить?

Другой вопрос: я применил keyListener на моем JTable, поэтому, если я попытаюсь нажать F5, когда JTable имеет фокус, я вызываю метод. Кроме того, он работает, но фокус остается на ячейке.

Это код:

KeyListener

public class MyKeyListenerSalvataggio extends KeyAdapter{ 
    public void keyReleased(KeyEvent e) { 
     if(e.getKeyCode() == KeyEvent.VK_F5){ 
      salva(); 
     } 

    } 
}; 

tableConti.addKeyListener(new MyKeyListenerSalvataggio()); 

После того, что я нажмите F5, метод Сальва() закончить это положение:

enter image description here

Как вам может видеть, я не могу очистить значение таблицы и удалить фокус на ячейке.

ответ

1

Вам нужно сообщить таблице, чтобы прекратить редактирование ячейки. См Table Stop Editing пару подходов:

  1. В ActionListener вы остановить редактирование ячейки, или
  2. Вы можете установить свойство таблицы, чтобы остановить редактирование, когда оно теряет фокус
+0

для моей второй вопрос, ваш ответ хороший. Спасибо, но за первый вопрос? – bircastri

+0

@bircastri Кстати, не используйте KeyListener для клавиши F5. Swing был разработан для использования с KeyBindings. Я не понимаю ваш «первый вопрос». Клавиша со стрелкой вправо будет перемещать курсор только в текстовом поле, это не изменит фокус на другой компонент. – camickr

+0

Мой первый вопрос: когда я нажимаю кнопку «Ввод», и я нахожусь на последнем JTextField, мой jtable, получаю фокус, я написал свой код, чтобы сделать это. Я сосредоточен на четвертом столбце первой строки моего JTable. Теперь, если я хочу переместить фокус на третий столбец или пятый столбец, я использую правую кнопку мыши на клавиатуре или левой кнопке, верно? Поэтому фокус не перемещается на третий или пятый, но в первом столбце – bircastri

Смежные вопросы