2011-07-27 45 views
0

我在想如果我可以設置指定的行和列顏色而不定義自己的自定義TableCellRender。使用TableCellRender設置JTable列和行的顏色

目前我使用這個代碼

TableCellRenderer cellRenderer = this.devicePropertyTable.getCellRenderer(1, 1); 
Component cellRenderComponent = cellRenderer.getTableCellRendererComponent(this.devicePropertyTable, "", false, false, 1, 1); 

if (propertyValue.equalsIgnoreCase("true")) 
{ 
    cellRenderComponent.setBackground(Color.green); 
} 
else 
{ 
    cellRenderComponent.setBackground(Color.red); 
} 

我會假設,這將讓細胞呈現-ER的表節點1,1,並與相應的顏色顏色吧。但是會發生什麼,它會着色整個桌子。

是否有另一種方法可以在不創建自定義TableCellRender的情況下執行此操作?

+1

自定義渲染器是_the_小硬幣,設計用於......以及在收集組件中自定義視覺效果:-)如果您需要比核心Swingx更強大且更易插拔的支持,則可能需要查看SwingX – kleopatra

回答

1

編輯:對於這個用例更好地使用prepareRenderer在上面的答案中提到。

你將不得不延長的JTable並覆蓋

<!-- language: lang-java --> 
getCellRenderer(int row, int column) 

public class MyTable extends JTable 
{ 
    @Override 
    public TableCellRenderer getCellRenderer(int row, int column) 
    { 
     return new TableCellRenderer() 
     { 
      Component getTableCellRendererComponent(JTable table, Object value, 
        boolean isSelected, boolean hasFocus, 
        int row, int column) 
      { 
       Component cellRenderComponent = this.MyTable.super.getCellRenderer(row, column); 
       if (getModel().getValue(row,column).toString().equalsIgnoreCase("true")) 
       { 
        cellRenderComponent.setBackground(Color.green); 
       } 
       else 
       { 
        cellRenderComponent.setBackground(Color.red); 
       } 

      } 
     } 
    } 

} 
+1

- 1,因爲它是錯誤的(你肯定不希望短路表的查找適當的渲染器) – kleopatra

4

我想知道如果我可以設置指定的行和列的顏色沒有定義自己的定製TableCellRender。

覆蓋JTable的prepareRenderer(...)方法。

查看Table Row Rendering瞭解一些示例以幫助您入門。

+0

沒有什麼比+1 +1更好的 – mKorbel

+0

@mKorbel除了SwingX :-) – kleopatra

+0

@kleopatra我真的很抱歉,看不見, 心不煩 :-) – mKorbel