Я пытаюсь реализовать ListSelectionListener для некоторых из моих JTables. Просто (на данный момент) ListSelectionListener должен просто возвращать текст ячейки, которая была выбрана.
У моей программы есть несколько JTables, и я хотел бы, чтобы один ListSelectionListener работал для них всех. В событии valueChanged объекта ListSelectionListener я думал, что можно сделать что-то вроде:
private class SelectionHandler implements ListSelectionListener {
public void valueChanged(ListSelectionEvent e)
{
JTable table = (JTable)e.getSource();
String data = (String) table.getValueAt(table.getSelectedRow(), 0);
// Print data
}
}
За кулисами я использовал следующий код, чтобы заставить SelectionHandler работать с рассматриваемой таблицей:
fbTable.setCellSelectionEnabled(true);
ListSelectionModel cellSM = fbTable.getSelectionModel();
cellSM.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
cellSelectionModel.addListSelectionListener(selectionHandler);
При запуске программы появляется ошибка ClassCastException:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.DefaultListSelectionModel cannot be cast to javax.swing.JTable
at cardboardfantasy.CardboardFantasyView$SelectionHandler.valueChanged(CardboardFantasyView.java:360)
// This is the line in question: JTable table = (JTable)e.getSource();
Есть ли способ сделать что-то подобное? Одним из решений, о котором я подумал, было сравнение источника события (e.getSource ()) со всеми моими JTables, чтобы увидеть, являются ли они эквивалентными (большой блок if), а затем просто вызов .getValueAt внутри этого блока, но это сделало бы код в будущем трудно, если таблицы будут добавлены или удалены.