2010-07-02 13 views
19

J'ai mon sur rendu de cellule personnalisé et je veux supprimer la bordure de la cellule.
Comment puis-je le faire? J'ai essayé setBorder mais ça ne marche pas.supprimer des cellules de bordure dans un jtable

Voici mon code renderer:

public class MyTableCellRenderer extends DefaultTableCellRenderer { 

    private static final long serialVersionUID = -1195682136616306875L; 

    public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) { 
     Component c = super.getTableCellRendererComponent(table, value, 
       isSelected, hasFocus, row, column); 
     if (!isSelected) { 
      if (row % 2 == 0 && row != 1) { 
       c.setBackground(new Color(255, 255, 150)); 
      } else { 
       c.setBackground(Color.WHITE); 
      } 
     } else { 
      c.setBackground(new Color(255, 230, 255)); 
     } 
     c.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); 
     return c; 
    } 
} 

Répondre

48

Les lignes tracées entre les cellules ne font pas partie des cellules elles-mêmes. Ils sont dessinés par la table. Vous pouvez les désactiver pour la table entière avec:

table.setShowGrid(false); 

Pour désactiver seulement le rapport à l'horizontale ou seulement les lignes verticales:

table.setShowHorizontalLines(false); 
table.setShowVerticalLines(false); 

Ou, vous pouvez changer la couleur des lignes avec:

table.setGridColor(color) 
+0

setShowXX() a travaillé pour moi merci. – harshit

+1

Vous pouvez faire les deux en même temps avec le [setShowGrid()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html#setShowGrid (boolean)) ainsi –

+0

@WimDeblauwe Merci, j'ai raté celui-là –

2

Je ne sais pas comment votre code compile depuis que composants Swing peuvent avoir une méthode frontière et la classe de composants ne dispose pas d'un setBorder().

Quand j'Override la valeur par défaut j'utiliser quelque chose renderer comme:

Class CustomRenderer extends DefaultTableCellRenderer 
{ 
    public Component getTableCellRendererComponent(
     JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
     this.setBorder (BorderFactory.createBevelBorder (EtchedBorder.RAISED)); 
     return this; 
    } 
} 
+0

Je peux définir tout type de bordures sauf le emptyBorder. – harshit

+2

Et qu'attendez-vous de voir lorsque vous utilisez un EmptyBorder? Comment savez-vous que ça ne marche pas? Cela fonctionne bien pour moi, le texte est en haut contre le bord gauche au lieu d'être indenté de 1 pixel à cause de la bordure par défaut. – camickr

+0

très bien, merci +1 – mKorbel