有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为Nimbus外观设计简单的单元渲染器

我有一个简单的ish单元渲染器,它由几个JLabel组成(渲染器本身扩展了JPanel),我试图让它在Nimbus外观中进行合理渲染。基本上,在较浅的行中(因为Nimbus有交替行着色),我的特定单元格渲染器使用的是表格背景色(比较浅和较深的颜色都要暗)。在我的渲染器中,我执行以下操作:

if (isSelected) {
    setBackground(table.getSelectionBackground);
}
else {
    setBackground(table.getBackground);
}

如果我注释掉整个代码块,那么我的所有行都是较暗的颜色(不是表格背景,但也不是交替颜色)。我甚至不知道我是否明白会发生什么!上面的代码片段是如何生成具有不同背景颜色的单元格的?在调用我的方法之间,table.getBackground颜色是否在变化

我尝试过使用以下代码片段:

Color alternateColor = sun.swing.DefaultLookup.getColor(
                         peer, 
                         peer.getUI, 
                         "Table.alternateRowColor");
if (alternateColor != null && row % 2 == 0)
    setBackground(alternateColor);

DefaultTableCellRenderer类中。而且它似乎没有任何影响。有没有人有使用Nimbus的自定义单元格渲染器

EDIT:如果有人感兴趣,这是Scala表格单元格渲染器的问题,因为我实际上使用的是Scala,而不是Java。下面的公认答案在Java程序中运行良好。单独提出的问题here


共 (1) 个答案

  1. # 1 楼答案

    您的第一段代码是否正常。我认为您必须使用UIManager.getColor("Table.alternateRowColor")作为备用行和表。getBackground()否则。对于所选行,请使用表。getSelectionBackground()。因此,您的代码可能看起来像

    if (isSelected) {
        setBackground(table.getSelectionBackground());
    }
    else {
        if ( row % 2 == 0 ) {
           setBackground(UIManager.getColor("Table.alternateRowColor"));
        } else { 
           setBackground(table.getBackground());
        }
    }
    

    别忘了确保面板不透明,标签透明

    以下是指向Nimbus UI默认值的良好链接: http://www.duncanjauncey.com/java/ui/uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html