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
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser:
JTable.convertRowIndexToModel( int viewIndex )
Avec cet index vous pouvez accéder à votre modèle de table et de voir quel est l'objet dont vous avez besoin.
Note Table de tri avec cette méthode a été introduite dans la version 1.6 de Java