Это, возможно имеет тривиальное решение, но я в конце своей привязи, таким образом, я надеюсь, что кто-то может выручить.
Я использую JTable, который имеет пользовательский рендерер и пользовательского редактора для ряда столбцов.
Рендерер использует компонент JLabel, и редактор использует компонент JSpinner.
Наши пользователи хотят смочь ввести значения в столбец и затем нажать TAB или ENTER для перемещения в следующую редактируемую ячейку в таблице.
Если я понимаю правильно, это - поведение по умолчанию для JTable.
Однако это, кажется, не работает правильно на меня. Пока пользователь не нажимает на ячейку, только JLabel отображен.
JSpinner (т.е. CellEditor) только отображен, когда пользователь дважды щелкает по ячейке. Так, похоже, что ячейка входит в режим "редактирования" только на MouseEvents, но не, когда это фокусируется.
Как я заставляю ячейку входить в режим редактирования, как только это фокусируется?
Этого можно добиться программно, просто слушать события фокуса на ячейке, при фокусе и разрешении редактирования, начать редактирование.
Спасибо n00213f. Тема и пример из вашего сообщения были полезны. Перегрузив метод changeSelection в JTable, как указано в теме, JTable проверяет, является ли ячейка редактируемой при каждом изменении выделения. Если ячейка редактируема, она отобразит CellEditor и передаст фокус компоненту редактора.
Для полноты, вот мое решение:
JTable myTable = new javax.swing.JTable()
{
public void changeSelection(final int row, final int column, boolean toggle, boolean extend)
{
super.changeSelection(row, column, toggle, extend);
myTable.editCellAt(row, column);
myTable.transferFocus();
}
};