2010-07-02 32 views
19

Tengo mi en el procesador de celdas personalizado y quiero eliminar el borde de la celda.
¿Cómo puedo hacerlo? Intenté setBorder pero no funciona.eliminar el borde de las celdas en un jtable

Aquí está mi código de render:

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

Respuesta

48

Las líneas dibujadas entre las células no son parte de las propias células. Ellos son dibujados por la mesa. Puede desactivarlas para toda la tabla con:

table.setShowGrid(false); 

Para desactivar sólo el de la horizontal o sólo las líneas verticales:

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

O bien, puede cambiar el color de las líneas con:

table.setGridColor(color) 
+0

setShowXX() funcionó para mí, gracias. – harshit

+1

Puede hacer ambas cosas al mismo tiempo con [setShowGrid()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html#setShowGrid (boolean)) también –

+0

@WimDeblauwe Gracias, me perdí esa –

2

No sé cómo el código se compila ya que sólo los componentes Swing pueden tener un borde y la clase de componente no tiene un método() setBorder.

Cuando puedo reemplazar el procesador predeterminado que usar algo como:

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

Puedo establecer todo tipo de bordes excepto emptyBorder. – harshit

+2

¿Y qué esperas ver cuando utilizas EmptyBorder? ¿Cómo sabes que no funciona? Funciona bien para mí, el texto está contra el borde izquierdo en lugar de ser sangrado por 1 píxel debido al borde predeterminado. – camickr

+0

muy agradable, gracias +1 – mKorbel

Cuestiones relacionadas