2013-06-02 138 views
1

我想更改我的JTable中整行的顏色。如何更改JTable中的行顏色

我定義JTable的:

JTable table = new JTable(data, columnNames); 

其中數據爲columnNames是字符串表。

最常見的方式做到這一點是寫自己的類:

public class StatusColumnCellRenderer extends DefaultTableCellRenderer { 

     @Override 
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { 

      //Cells are by default rendered as a JLabel. 
      JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); 

      //Get the status for the current row. 

      l.setBackground(Color.GREEN); 

      //Return the JLabel which renders the cell. 
      return l; 
     } 
    } 

,並呼籲:

this.table.getColumnModel().getColumn(0).setCellRenderer(new StatusColumnCellRenderer()); 

但它不能正常工作。我究竟做錯了什麼?

+0

這應該工作。問題是你沒有向我們展示的東西。發佈[SSCCE](http://sscce.org/) – Reimeus

+0

我將完整的代碼添加到了我的帖子中。 –

回答

1

你設置TableCellRenderer正確最初但此時你使用此代碼替換它:

for (int i = 0 ; i < table.getColumnCount(); i++) 
    table.getColumnModel().getColumn(i).setCellRenderer(centerRenderer); 

更改它,使它設置正確的指數在有色格渲染器(與加括號(! )):

for (int i = 0; i < table.getColumnCount(); i++) { 
    TableColumn column = table.getColumnModel().getColumn(i); 
    if (i == COLOR_COLUMN) { // COLOR_COLUMN = 1 
     column.setCellRenderer(new StatusColumnCellRenderer()); 
    } else { 
     column.setCellRenderer(centerRenderer); 
    } 
} 
+0

好的,謝謝!小改正後工作正常。 –

+0

要回答您以前的問題:您可以將所有內容放在循環中,如上所示 – Reimeus

+0

抱歉(-1k :-)整行有prepareRenderer,您可以在@camickr文章中看到 – mKorbel

2

我想改變整行的顏色在我的JTable。

您只是將渲染器添加到第一列,所以只有第一列將被着色,而不是整行。

如果您的實際需求是對行的所有列着色,請查看Table Row Rendering