Obtenir correctement les données d'un JTable (trié)

J'ai développé une base personnalisée JTableModel comme suit

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);
  }

  //...
}

Je puis utiliser une base personnalisée JTableCellRenderer comme suit

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;
  }
}

J'ai aussi une coutume Composite qui affiche diverses informations comme suit

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());
    //...
  }
}

Enfin, j'utilise un tableau pour la liste de mes données et le panneau personnalisé pour afficher les détails des données sélectionnées.

public class JCustomFrame extends JFrame {
  public JCustomFrame(List<MyClass> data) {
    //...
    JTable table = new JTable(new CustomTableModel(data));
    table.setDefaultRenderer(MyClass.class, new CustomTableCellRenderer());

  }
}

Ce que je suis en train d'accomplir est d'obtenir sélectionnés MyClass de la table indépendamment de tri.

J'ai essayé ListSelectionListener mais les méthodes ne renvoient pas d'autre chose que de l'index sélectionné. Même si j'ai l'index, si le tableau est trié, mon modèle n'est pas aussi sophistiqué et sera de retour le mauvais objet.

source d'informationauteur pek