2010-07-02 268 views
19

我有我的自定义单元格渲染器,并且想要删除单元格的边框。
我该怎么做?我试过setBorder但它不起作用。删除jtable中的单元格边框

这里是我的渲染代码:

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

回答

48

细胞之间画出的线条是不是细胞本身的一部分。他们被桌子画出来。你可以将其关闭整个表:

table.setShowGrid(false); 

要禁用只水平或只垂直线:

​​

或者,你可以改变线条的颜色有:

table.setGridColor(color) 
+0

setShowXX()为我工作,谢谢。 – harshit 2010-07-06 15:40:09

+1

您可以同时使用[setShowGrid()](http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html#setShowGrid(boolean)) – 2012-09-06 08:35:59

+0

@WimDeblauwe谢谢,我错过了那一个 – 2012-09-06 13:57:57

2

我不知道你的代码是如何编译,因为只有Swing组件可以有一个边境和组件类没有一个setBorder()方法。

当我重写的默认渲染我使用类似:

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

我能够设置所有类型的边界,除了emptyBorder。 – harshit 2010-07-02 16:37:27

+2

当您使用EmptyBorder时,您期望看到什么?你怎么知道它不工作。它对我来说工作得很好,由于默认的边框,文本在左边而不是缩进1像素。 – camickr 2010-07-02 16:46:59

+0

非常好,谢谢+1 – mKorbel 2011-11-09 13:11:36