Прослушиватель ячейки JTable?

Я использую JTable. Мне нужно получить уведомление, когда ячейка изменение выбора. Я попытался использовать ListSelectionListener, но Я получаю уведомление только при изменении выбора строки. Если я выберу a новый столбец в той же строке, я не получаю уведомления. Мне нужно знать, когда ячейка выбирается, а не при изменении ячейки. Есть ли слушатель, которого я могу использовать для этого ?

2 ответов


самый простой способ сделать это является вызов setCellSelectionEnabled(true), и передайте ссылку на свою таблицу слушателю. Когда вызывается прослушиватель, вызовите getSelectedRow() и getSelectedColumn() на исходной таблице.

альтернативой является установка прослушивателя выбора строки в таблице, прослушивателя выбора столбца на ColumnModel, а затем выяснить их пересечения.


один способ получить уведомление на колонки изменения выбора - как уже ответил @parsifal (в комментариях-это захватить внутреннюю selectionModel TableColumnModel и зарегистрировать слушателя:

table.getColumnModel().getSelectionModel().addListSelectionListener(selectionListener);

другой способ-зарегистрировать TableColumnModelListener с помощью columnModel:

table.getColumnModel().addColumnModelListener(columnModelListener);

первый "короче" с точки зрения кода: только один метод для реализации против нескольких - самый пустой, кроме columnSelectionChanged.

второй более надежен против динамических изменений: с первым нет возможности защитить от изменений свойства selectionModel columnModel ... потому что это не собственность. Или другими словами: в (заведомо редком) случае, когда код приложения заменяет selectionModel, слушатель слушает пустоту. Установка columnModelListener невосприимчива к такому изменению, так как columnModel передает события из своей selectionModel в зависимости от того, должен быть.