设计适合Nimbus外观的简单单元格渲染器 - java

我有一个简单的单元格渲染器,它由几个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合作的自定义单元格渲染器?

编辑:如果有人感兴趣,那么事实证明这是Scala表单元格渲染器的问题,因为我实际上是在使用Scala而不是Java。以下可接受的答案在Java程序中可以正常工作。单独的问题提交here

参考方案

如果您的第一段代码还不错,我认为您必须使用UIManager.getColor("Table.alternateRowColor")来替换行,否则必须使用table.getBackground()。对于选定的行,请使用table.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

Java Swing SearchBox模型 - java

我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。

Java swing-事件触发后,我可以在选项卡上更改名称吗? - java

一,代码:tab_textArea_file.addTab(docLabel, null, scrollPane_textArea, null); 因此,情况是我有一个可供用户选择的文件列表。用户单击文件时,将读取文件的内容并将其加载到textArea中。 “ docLabel”(在上面的代码中)是应该更改为所选文件名的字符串,但并非如此。是否可以通过上面的…

Swing-典型桌面应用程序中的并发 - java

这可能是一个广泛的问题,但我想知道单用户桌面应用程序通常在何处使用并发。您如何发现理想情况下(在设计阶段)并发问题?附注:从操作系统理论上来说,并发问题通常发生在无法共享资源(例如打印机)的情况下。不过,我仍然对在编程级别上可能发生的情况感到迷惑。 java大神给出的解决方案 Event Dispatch thread与其他逻辑之间的Swing中可能存在线程…

Swing JButton不会更改onclick的背景颜色 - java

我希望单击该按钮时它永远不会更改背景颜色,默认情况下该颜色将更改为浅蓝色灰色。这是我的代码JButton b = new JButton(); b.setBackground(SystemColor.control); 我希望按钮在单击时不会改变背景颜色。 参考方案 按钮的绘制取决于LAF。您可以执行以下操作之一:定义您自己的UI委托并将其分配给按钮。 缺点…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)