Java JTable désactiver unique de sélection de cellule bordure en relief
J'ai une JTable avec trois colonnes dans chaque ligne, voir l'image:
Pour une raison quelconque en fonction de la colonne i sélectionnez-je obtenir le petit contour bleu autour d'elle (V140116554) dans l'image ci-dessus.
Actuellement, je utiliser pour sélectionner toute la ligne:
vTable.setRowSelectionAllowed(true);
Comment puis-je désactiver cette option?
EDIT:
Ajouté une classe:
public class VisitorRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setBorder(noFocusBorder);
return this;
}
}
Et a ajouté:
vTable.setDefaultRenderer(String.class, new VisitorRenderer());
Mais toujours obtenir la frontière
OriginalL'auteur Alosyius | 2013-09-14
Vous devez vous connecter pour publier un commentaire.
La
TableCellRenderer
est responsable de l'élaboration du rectangle de focus autour de la concentre actuellement cellule. Vous avez besoin de fournir votre propre convertisseur qui est en mesure de substitution de cette fonction ou de fournir son propre...Par exemple;
Il utilise le
DefaultTableCellRenderer
que le moteur de rendu de base et définit la composanteBorder
ànoFocusBorder
qui est défini dansDefaultTableCellRenderer
comme unEmptyBorder
Vous devrez ensuite définir ce moteur de rendu comme le moteur de rendu par défaut pour l'effectuées colonnes. Découvrez Comment utiliser des tableaux pour plus de détails
Mise à jour avec exemple
Fonctionne très bien pour moi...
Et juste pour être sûr, j'ai changé
setBorder(noFocusBorder);
...À partir de l'apparence des choses, le visiteur de la colonne type de classe n'est pas signalée comme
String
par leTableModel
...Mis à jour avec proxy convertisseur concept
Parce que vous voulez supprimer le focus de la frontière de chaque cellule. Vous avez trois choix...
Class
type que vous pourriez avoir besoin pour votre table. Cela peut de temps et de répétitions beaucoup de code pour obtenir qu'un faible effet.TableCellRenderer
pour effectuer le rendu de l', mais s'applique à certains changements mineurs à la suite, par exemple, supprimer la bordure......
Au lieu de faire quelque chose comme...
Ce que nous avons fait avant, nous aimerions faire cela à la place...
Cela signifie que nous pouvons tirer avantage de ce moteur de rendu par défaut est déjà disponible, sans savoir ce que pourrait être, mais aussi l'approvisionnement de nos propres exigences à elle...
Fonctionne très bien pour moi. Voir les mises à jour. Je soupçonne que le visiteur colonne n'est pas signalée comme
String.class
par votreTableModel
...C'était le problème, cependant j'ai 2 colonnes Icon.class maintenant, la colonne du milieu n'affiche pas de frontière, mais le premier et le dernier encore le faire parce qu'ils sont Icon.Class
Vous aurez à faire la même chose pour chaque type. Une astuce serait de créer un
ProxyCellRenderer
qui a pris une autreTableCellRenderer
, utilisé pour que le mécanisme pour convertisseur le contenu de la cellule, mais la frontière à unEmptyBorder
, de cette façon, vous pouvez simplement obtenir le défaut convertisseurs qui sont en cours d'utilisation et de les nourrir à travers ce proxy rendu à la place...Pas tout à fait sûr que j'ai suivi :/
OriginalL'auteur MadProgrammer
Si vous n'avez absolument pas besoin de la frontière, sur n'importe quelle cellule dans la table, il suffit d'appliquer
MyRenderer
à toutes les cellules, indépendamment de la classe. Vous pouvez le faire comme ceci:table.setDefaultRenderer(Object.class, new MyRenderer());
OriginalL'auteur Pranx