2011-07-04 132 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 { ... }