2011-07-04 163 views
3

我正在使用NimbusLookAndFeel。有了這個外觀和感覺,JTable的單元格背景可以是白色和淺灰色(這取決於行號)。 現在,我正在寫一些實現TableCellRenderer的自定義單元格渲染器。我需要根據JTable中單元格的位置設置這些渲染器的背景。JTable TableCellRenderer背景與NimbusLookAndFeel顏色問題

public class MyCellRenderer extends JLabel implements TableCellRenderer{ 


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

       Color bgColor = //need to retrieve the right cell background color 
       setBackground(bgColor); 
     return this; 
    } 

} 

我怎樣才能得到這樣的顏色值?

+0

重新解讀,我我不完全確定你在問什麼:默認情況下,Nimbus將_rows_而不是列的背景條紋化。你遇到的問題究竟是什麼?順便說一句(nitpicking ...)在你的代碼片段中不擴展TableCellRenderer,你可以實現它。 – kleopatra

回答

7

從技術上講,你可以通過UIManager的訪問顏色

Color alternate = UIManager.getColor("Table.alternateRowColor"); 

實際上,我不會建議從頭開始編寫渲染 - 還有很多細節要考慮得到它的權利。這些細節是由f.i處理的。在SwingX中(有偏見我:-)

期望你自己做邏輯;-)。這裏的工作片段(假設你想要的顏色由行不列,但改變這將是微不足道的......):

TableCellRenderer renderer = new TableCellRenderer() { 

     JLabel label = new JLabel(); 

     @Override 
     public Component getTableCellRendererComponent(JTable table, 
       Object value, boolean isSelected, boolean hasFocus, 
       int row, int column) { 
      label.setOpaque(true); 
      label.setText("" + value); 
      Color alternate = UIManager.getColor("Table.alternateRowColor"); 
      if (row % 2 == 1) { 
       label.setBackground(alternate); 
      } else { 
       label.setBackground(Color.WHITE); 
      } 
      return label; 
     } 

    }; 
    table.setDefaultRenderer(Object.class, renderer); 
+0

我別無選擇。我不得不寫一個自定義的單元格渲染器。我會嘗試你的解決方案,謝謝。但我不明白這樣的電話如何根據列號區分顏色。 – Heisenbug

+0

它不起作用。細胞仍然是空白。 – Heisenbug

+0

@Overbose - 應用於哪個顏色的邏輯全部留給你;)注意:有些狀態喜歡選擇,聚焦,可編輯,拖拽......以及所有需要考慮的組合。 「空白」是什麼意思? – kleopatra

-1

這應該很好地工作:

public class MyRenderer extends DefaultTableCellRenderer { ... }