Используя JTable, метод setValueAt() моей таблицы Model перемещает выделение в следующую строку в определенных случаях, используя setRowSelectionInterval() и setColumnSelectionInterval(). Когда он вызывается из редактора ячейки (по умолчанию) (путем ввода пользователем на ячейку и вкладки "Включение"), код работает: выбирается желаемая следующая ячейка (первая в следующей строке).
Однако, если пользователь использует Return, а не Tab для фиксации редактирования, выбор не происходит; вместо этого выбирается ячейка ниже. Это хорошо со мной.
У меня также есть JButton, чтобы очистить строку. Функция действия кнопки вызывает функцию setValueAt() модели для желаемых ячеек. К сожалению, методы setRowSelectionInterval() и setColumnSelectionInterval() не имеют видимого эффекта; вместо этого никакие ячейки не выбраны.
Я пробовал table.requestFocusInWindow() и table.getParent(). RequestFocusInWindow(), а также table.changeSelection (строка, 0, ложь, ложь), все без видимого эффекта.
Есть ли что-то основное, что мне здесь не хватает, прежде чем я пойду на проблему создания SSCCE?
В случае, если это имеет значение, здесь иерархия контейнеров:
parent JPanel
button rows JPanel
button row 1 JPanel
button row 2 JPanel
table JScrollpane
JTable
Эта кнопка находится в строке 1 строки.
Благодарю!
Возможно, вы можете использовать прослушиватель Cell Cell для прослушивания изменений в таблице. Он прослушивает фактические изменения, сделанные редактором JTable.
Затем в прилагаемом Action
вы можете выбрать соответствующую строку. Возможно, вам потребуется обернуть код действия в SwingUtilities.invokeLater(...)
чтобы убедиться, что код выполняется после того, как таблица полностью завершила редактирование.
before I go to the trouble of building the SSCCE?
Построение SSCCE не проблема. Это инструмент для решения проблем, который вы всегда должны создавать, чтобы убедиться, что понимаете проблему. Кстати, TableModel НЕ должен изменять выбор таблицы, поэтому вы НЕ должны переопределять метод setValueAt (). TableModel просто управляет данными, а View обрабатывает выбор.