JTable Cliquable Colonne de Tri: le Tri des sortes de contenu des cellules, mais n'a pas de mise à jour mise en forme de cellule?
J'ai un sortable JTable
configuré pour utiliser une extension personnalisée de la AbstractTableModel
. Cependant, certains comportements de ce tableau est ce que j'attendais, et j'aimerais quelques conseils sur la façon de comprendre cela.
J'ai la JTable mis en place pour être sortable à l'aide de:
thisJTable.setAutoCreateRowSorter(true);
Cela me permet de trier le tableau en cliquant sur les en-têtes de colonne comme prévu.
Cependant, je trouve que quand je trier le tableau en cliquant sur les en-têtes de colonne, la mise en forme (en arrière-plan et la couleur de premier plan) de mes lignes ne sont pas triées.
J'avais mis en place ces lignes à code couleur basé sur les valeurs qu'elles contiennent. Quand j'ai trier par colonne d'en-tête de la mise en forme à un NUMÉRO de ligne reste la même (bien que le contenu qui a déjà été dans cette ligne déplacé).
La couleur de la ligne est réglé en remplaçant la valeur par défaut prepareRenderer
appel à la JTable:
thisTable = new JTable(thisModel){
//Set up custom rendering - Sets background color of row to correct value
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
CustTableModel thisModel = (CustTableModel) getModel();
c.setBackground(thisModel.getRowBackgroundColor(row));
c.setForeground(thisModel.getRowForeColor(row));
return c;
}
};
Est-il un meilleur/les différentes façon d'aborder cette question?
Dois-je utiliser une autre méthode pour faire mon rendu, une méthode qui permettrait de mettre à jour le rendu de la JTable sur un tri?
Ou dois-je chercher dans l'écriture de mon propre méthode de tri?
Solution (Merci mKorbel!)
J'ai pensé que je poste ma solution, car j'ai dû jouer avec un peu car je n'étais pas sûr si le nouvel indice serait passé à la prepareRenderer.
thisTable = new JTable(thisModel){
//Set up custom rendering - Sets background color of row to correct value
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
int viewIdx = row;
int modelIdx = convertRowIndexToModel(viewIdx);
Component c = super.prepareRenderer(renderer, row, column);
CustTableModel thisModel = (CustTableModel) getModel();
c.setBackground(thisModel.getRowBackgroundColor(modelIdx));
c.setForeground(thisModel.getRowForeColor(modelIdx));
return c;
}
};
votre prepareRenderer ne rien faire et complitating avec CustTableModel thisModel = (CustTableModel) getModel();, supprimez-le, moteur de Rendu est seulement sur le formatage, changement de Couleur, etc, pas pour créer JComponent, don9t faire
Je ne suis pas sûr si je suis votre commentaire. getRowForeColor et getRowBackgroundColor ajouter conditionnelle de coloration de la ligne, sur la base du contenu de la ligne (donc en passant rowIdx). Je suis l'aide de la super méthode pour créer le composant et puis tout simplement le réglage de l'arrière-plan et la couleur de premier plan de ce composant. J'ai besoin d'obtenir le TableModel, et de le jeter à mon CustTableModel parce que getRow[Avant|arrière-plan]la Couleur n'est pas une méthode définie pour d'autres modèles de table.
iam curieux de connaître le détail de getRowBackgroundColor()); code de l'intérieur ? @Panky
OriginalL'auteur Panky | 2012-04-25
Vous devez vous connecter pour publier un commentaire.
vous avez à convertir index de ligne de Vue pour le Modèle
Génial! Merci pour l'astuce, j'avais été à la recherche à la Javadoc de JTable pour un certain temps, mais ne pas tomber sur ce en quelque sorte.
à l'aide d'un trieur, rappelez-vous de toujours traduire des coordonnées des cellules."—le Tri et le Filtrage; malheureusement, je n'ai pas eu à chercher plus d'une fois. 🙂
OriginalL'auteur mKorbel
Vous pouvez activer la table de tri en cliquant sur l'en-tête à l'aide de cette
table.setAutoCreateRowSorter(true);
pour plus d'informations, visitez ce site http://www.codejava.net/java-se/swing/6-techniques-for-sorting-jtable-you-should-know
OriginalL'auteur Filip Kováč