JTable TableCellRenderer背景带有NimbusLookAndFeel颜色问题

Hei*_*bug 3 swing jtable look-and-feel nimbus tablecellrenderer

我正在使用NimbusLookAndFeel.有了这种外观和感觉JTable的单元格背景是白色和浅灰色(它取决于行号).现在,我正在编写一些实现TableCellRenderer的自定义单元格渲染器.我需要根据JTable中单元格的位置设置这些渲染器的背景.

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得这样的Color值?

kle*_*tra 7

从技术上讲,您可以通过UIManager访问颜色

   Color alternate = UIManager.getColor("Table.alternateRowColor");
Run Code Online (Sandbox Code Playgroud)

实际上,我不建议从头开始编写渲染器 - 有许多细节需要考虑才能使其正确.这些细节是在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);
Run Code Online (Sandbox Code Playgroud)