2010-07-02 14 views
19

Ich habe meine benutzerdefinierte Cell Renderer und möchte den Rand der Zelle entfernen.
Wie kann ich es tun? Ich habe versucht, SetBorder, aber es funktioniert nicht.Zellenrahmen in einer Jtable entfernen

Hier ist mein Renderer Code:

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; 
    } 
} 

Antwort

48

Die zwischen den Zellen gezogenen Linien sind nicht Teil der Zellen selbst. Sie werden vom Tisch gezogen. Sie können sie mit für die gesamte Tabelle deaktivieren:

table.setShowGrid(false); 

So deaktivieren Sie einfach die horizontale oder nur die vertikalen Linien:

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

Oder können Sie die Farbe der Linien ändern mit:

table.setGridColor(color) 
+0

setShowXX() arbeitete für mich danke. – harshit

+1

Sie können beide gleichzeitig mit dem [setShowGrid()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html#setShowGrid (boolean)) auch tun –

+0

@WimDeblauwe Danke, das habe ich vermisst –

2

Ich weiß nicht, wie Ihr Code kompiliert nur da Komponenten Schwingen eine Grenze und die Komponentenklasse haben keine setBorder() Methode hat.

Wenn ich die Standard-Renderer außer Kraft setzen verwende ich so etwas wie:

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

Ich bin in der Lage, alle Arten von Bordern außer dem leeren Rahmen einzustellen. – harshit

+2

Und was erwarten Sie, wenn Sie einen EmptyBorder verwenden? Woher weißt du, dass es nicht funktioniert? Es funktioniert gut für mich, der Text ist gegen den linken Rand, statt um 1 Pixel wegen der Standard-Border eingerückt. – camickr

+0

sehr nett, danke +1 – mKorbel