Swing JTable - sélectionner la cellule sélectionnée dans une couleur différente du reste de la ligne sélectionnée?
J'ai une base de swing JTable et de l'exigence, c'est que quand on clique sur une cellule, l'ensemble de la ligne doit être mis en évidence, et aussi que la cellule qui a été cliqué devrait être d'une couleur différente du reste de la ligne en surbrillance.
Actuellement, j'ai isRowSelectionAllowed comme vrai
J'ai essayé en utilisant un custom TableCellRenderer qui est comme suit:
public class CustomTableCellRenderer extends DefaultTableCellRenderer
{
public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (isSelected) {
c.setBackground(Color.red);
}
else {
c.setForeground(Color.black);
c.setBackground(Color.white);
}
return c;
}
}
Mais cela ne semble pas fonctionner (l'ensemble de la ligne surlignée en rouge).
J'ai aussi essayé le réglage de l'UIManager propriété comme suit:
UIManager.put("Table.focusCellBackground",
new javax.swing.plaf.ColorUIResource (Color.red));
Mais cela ne semble pas fonctionner non plus (même si, quand j'ai essayé de fixer un cadre à l'aide
UIManager.put("Table.focusCellHighlightBorder",
new BorderUIResource.LineBorderUIResource(Color.red));
qui a bien fonctionné)
Pourriez-vous veuillez donner des suggestions de ce que je pourrais faire?
OriginalL'auteur Madhavan Kulukkallur | 2011-07-28
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Puis dans le
getTableCellRendererComponent
Rendu de la cellule sélectionnée en rouge, le reste de la ligne en vert, et le reste de la colonne en bleu. Remarque: la sélection de cellules nécessite la sélection de modèle unique, une sélection d'autres modèles peuvent provoquer des comportements imprévus.
isCellSelected
etisRowSelected
, mais ne semble pas faire quoi que ce soit.Désolé, mon erreur - j'ai essayé, et cela fonctionne. Merci beaucoup. (La définition de ce que l'on a accepté de répondre à cause du code du travail. D'autres réponses ont été utile pour l'apprentissage de trop).
OriginalL'auteur Devon_C_Miller
Vous devez cocher la case "possèdefocus variable", pas le "isSelected" à la variable.
Une autre option au lieu de créer mulutiple personnalisé moteurs de rendu (dans le cas où vous table a des colonnes de différents types de classe) est d'utiliser la Ligne De Tableau Renderering approche.
OriginalL'auteur camickr
Vous devrez tourner à la ligne sélection large et de sélection de cellule lors de la table. Ensuite, trouver un moyen de revenir en arrière et de mettre en évidence la ligne si nécessaire.
Oui, pour la première partie, non à la seconde. Vous aurez besoin d'un Rendu de Cellule qui met en valeur la ligne sélectionnée dans une couleur différente de celle de la cellule sélectionnée.
Je vais essayer de vous en informer.
OriginalL'auteur jzd