2015-09-27 3 views
1

Есть ли способ прослушивать выбор ячеек даже на уже выбранных ячейках с JTable, кроме использования MouseListener?Слушайте выбор в уже выбранной ячейке для JTable


У меня есть JTable с прослушивателем строк и столбцов. Ни один из слушателей не срабатывает при выборе уже выбранной ячейки:

JTable table() { 
    JTable table = new JTable(10, 10); 
    table.getSelectionModel().addListSelectionListener(rowListener); 
    table.getColumnModel().getSelectionModel().addListSelectionListener(colListener); 
    return table; 
} 

ListSelectionListener rowListener = event -> { 
    if(event.getValueIsAdjusting()) 
     return; 

    System.out.println("Row: "+((ListSelectionModel) event.getSource()).getMinSelectionIndex()); 
}; 

ListSelectionListener colListener = event -> { 
    if(event.getValueIsAdjusting()) 
     return; 

    System.out.println("Col: "+((ListSelectionModel) event.getSource()).getMinSelectionIndex()); 
}; 

Моя цель состояла в том, чтобы включать/выключать ячейки. Он работает, за исключением того факта, что слушатели не срабатывают при выборе уже выбранной ячейки, которая представлена ​​через SSCCE выше.

Нет, я не могу прослушивать JTable (или это модели/модели выбора), чтобы обработать это, если бы я не использовал MouseListener и не мог вручную управлять cooridnates. Используя TableModelListener, я могу прослушивать изменения, но это событие нацелено на предыдущую ячейку (которая была отменена), и щелчок по области, которая не выбирает ячейку, приведет к тому, что этот прослушиватель загорится.

ответ

2

Моя цель состояла в том, чтобы включать/выключать ячейки.

Хранить булевы данные в таблицеModel. Тогда всякий раз, когда вы нажимаете на ячейку, значение будет переключаться между true/false.

По умолчанию средство визуализации для логического значения является флажком. Вы всегда можете использовать собственный рендерер, если вы не хотите видеть этот флажок.