j'ai développé un JTableModel de mesure de base comme suitcorrectement obtenir des données à partir d'un (trié) JTable
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);
}
// ...
}
J'utilise ensuite un JTableCellRenderer de base de mesure 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 un JPanel personnalisés 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 lister mes ata 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 les MyClass sélectionnés de la table quel que soit le tri.
J'ai essayé ListSelectionListener mais les méthodes ne retournent rien d'autre que les index sélectionnés. Même si j'ai l'index, si la table est triée, mon modèle n'est pas si sophistiqué et retournera le mauvais objet.
Vous pouvez obtenir un JTable pour afficher les données triées différemment du modèle sous-jacent? Comment faites-vous pour trier, et quand a-t-il été introduit? –
@Carl Smoticz: depuis Java 1.6 je pense – OscarRyz