swing - JTable TableCellRenderer背景与NimbusLookAndFeel颜色问题

标签 swing jtable look-and-feel tablecellrenderer nimbus

我正在使用 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;
    }

}

如何获得这样的颜色值?

最佳答案

从技术上讲,您可以通过 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);

关于swing - JTable TableCellRenderer背景与NimbusLookAndFeel颜色问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6571877/

相关文章:

java L&F 获得现代 "wpf"外观

java - 矩阵到 JTable

java - 从 JTable 单元格获取值

java - 无法在 JScrollPane 内构建或显示带有复选框的 Swing JTable

Java 外观 (L&F)

java - 设置外观时序列化 AbstractTableModel 失败

java - 仅将 JButton 添加到 JTable 中的某些行和列

java - SwingWorker done() 调用了两次?

java - 重新绘制 JPanel 的一部分

java - 如何从数据库中获取值?