Я разработал базовую пользовательскую JTableModel следующим образом
public class CustomTableModel extends DefaultTableModel {
List<MyClass> data;
public CustomTableModel(List<MyClass> data) {
this.data = data;
}
public Class<?> getColumnClass(int columnIndex) {
return MyClass.class;
}
public MyClass getValueAt(int rowIndex, int columnIndex) {
return data.get(rowIndex);
}
// ...
}
Затем я использую базовый пользовательский JTableCellRenderer следующим образом
public class CustomTableCellRenderer extends JLabel implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
MyClass myClass = (MyClass)value;
lbl.setText(myClass.getString());
return this;
}
}
У меня также есть пользовательская JPanel, которая отображает различную информацию вследует
public class MyPanel extends JPanel {
private MyClass myClass;
public MyPanel(MyClass myClass) {
// initialize components
}
public setMyClass(MyClass myClass) {
this.myClass = myClass;
updateFields();
}
private void updateFields() {
this.fieldString.setText(myClass == null ? "" : myClass.getString());
// ...
}
}
Наконец, я использую таблицу для отображения моих данных и пользовательскую панель для отображения сведений о выбранных данных.
public class JCustomFrame extends JFrame {
public JCustomFrame(List<MyClass> data) {
// ...
JTable table = new JTable(new CustomTableModel(data));
table.setDefaultRenderer(MyClass.class, new CustomTableCellRenderer());
}
}
Я пытаюсь добиться получениявыбранный MyClass из таблицы независимо от сортировки .
Я пробовал ListSelectionListener, но методы не возвращают ничего, кроме выбранных индексов.Даже если у меня есть индекс, если таблица отсортирована, моя модель не настолько сложна и вернет неправильный объект.