Я бы хотел:
- Есть кнопка добавить строку в JTable
- Когда эта строка будет создана, поместите ее в фокус и начните редактирование первого столбца
- Когда пользователь нажимает клавишу Tab, выберите следующий столбец.
Для кнопки Добавить я делаю это:
add_button.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
int row = table_model.addRow();
table.setRowSelectionInterval(row, row);
table.scrollRectToVisible(table.getCellRect(row, 0, true));
table.editCellAt(row, 0);
table.transferFocus();
did_add = true;
}
});
Это действительно заставляет ячейку таблицы сфокусироваться и начать редактирование. Чтобы убедиться, что нажатие Tab выберет следующую ячейку, у меня есть это:
table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0, false), "selectNextColumnCell");
Вот моя проблема:
- Если я сделал какие-либо ячейки ранее, это работает отлично. Я могу отредактировать первый столбец и нажать клавишу Tab, после чего будет выбран следующий столбец.
- Однако, если эта таблица была недавно создана или какой-то виджет за пределами этой таблицы ранее имел фокус, и я нажимаю кнопку «Добавить», то это происходит:
- Первый столбец выбран правильно и доступен для редактирования
- Когда я нажимаю клавишу Tab, обычно фокусируется одна и та же ячейка
- Мне нужно нажать Tab еще раз, чтобы перейти к следующему столбцу
- Иногда эта первая вкладка фактически переходит в ячейку 0,0
Итак, кажется, что, хотя ячейка сфокусирована и редактируется, что-то не так с фокусом таблицы, потому что неправильно указывать, какая ячейка следующая.
Я пробовал несколько обходных путей, связанных с установкой фокуса на таблице, но, похоже, ни один из них не работает (requestFocus, requestFocusInWindow, настройка выбора таблицы и т. Д.).
Есть идеи, как это исправить?