2010-07-02 165 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