JTable setRowSelectionInterval не имеет никакого эффекта для JButton

1

Используя 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 строки.

Благодарю!

  • 1
    Если бы это была моя проблема, и мне нужна помощь, я бы создал и опубликовал минимальный пример программы, mcve и надеялся, что, предоставив самую маленькую программу, демонстрирующую проблему, кто-то сможет найти решение.
  • 2
    before I go to the trouble of building the SSCCE? Построение SSCCE не проблема. Это инструмент для решения проблем, который вы всегда должны создавать, чтобы убедиться, что понимаете проблему. Кстати, TableModel НЕ должен изменять выбор таблицы, поэтому вы НЕ должны переопределять метод setValueAt (). TableModel просто управляет данными, а View обрабатывает выбор.
Показать ещё 7 комментариев
Теги:
swing
selection
jtable

1 ответ

4
Лучший ответ

Возможно, вы можете использовать прослушиватель Cell Cell для прослушивания изменений в таблице. Он прослушивает фактические изменения, сделанные редактором JTable.

Затем в прилагаемом Action вы можете выбрать соответствующую строку. Возможно, вам потребуется обернуть код действия в SwingUtilities.invokeLater(...) чтобы убедиться, что код выполняется после того, как таблица полностью завершила редактирование.

  • 0
    Спасибо! На самом деле, простое использование invokeLater () в setValueAt () приводит к исчезновению симптома, но, как отмечено выше, это не правильное решение. Проблема в том, что у меня есть лошадь внутри телеги!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню