Jon*_*nas 5 java swing colors nimbus uimanager
我有一个自定义ListCellRenderer,并希望使用默认的Nimbus选择背景颜色.我可以用以下方法查找颜色:
Color selectionBackground = UIManager.getColor("nimbusSelectionBackground");
Run Code Online (Sandbox Code Playgroud)
如果我打印它,它具有与Nimbus默认颜色相同的值.但是当我在JPanel上使用它时,我会得到一种不同的灰色,我怎样才能使用UIManager的颜色?
当我做:
setBackground(Color.RED);
Run Code Online (Sandbox Code Playgroud)
JPanels背景以红色显示,但是当我这样做时:
setBackground(selectionBackground);
Run Code Online (Sandbox Code Playgroud)
不使用"selectionBackground"颜色,而是灰色.
这是一个示例和截图:

背景应该是:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
public class PanelColor {
public static void main(String[] args) {
// switch to Nimbus Look And Feel
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
try {
UIManager.setLookAndFeel(info.getClassName());
} catch (Exception e) { e.printStackTrace(); }
break;
}
}
Color selectionBackground = UIManager.getColor("nimbusSelectionBackground");
JPanel panel = new JPanel(new BorderLayout());
panel.setPreferredSize(new Dimension(300,50));
panel.add(new JLabel(selectionBackground.toString()), BorderLayout.NORTH);
// is not showing the selectionBackground color
panel.setBackground(selectionBackground);
JFrame frame = new JFrame();
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
我不认为Nimbus"抵制"设置颜色.它错误地假设您没有覆盖默认值,因为UIManager.getColor()返回ColorUIResource的实例.
ColorUIResource只是一个实现UIResource标记接口的Color.根据Javadoc,L&Fs"使用此接口来决定是否已覆盖属性值".Nimbus检查背景颜色,注意到你没有覆盖它,并且回退到你不期望的一些内部行为.
Nimbus 显然拒绝将其颜色用于其他地方。我不久前也偶然发现了这个问题,当时我最好的解决方案是使用Color组件创建一个新的组件(您可以查询)并使用它。当然,即使 L&F 发生变化,您也会坚持使用该颜色。
DerivedColor我知道这就是您从 UIManager 返回的全部内容。不过我还没有找到更好的解决方案。
对于其他 L&F 和其他事物也是如此。例如,GTK L&F 会很乐意为您提供您想要的图标,但它们不会在您自己的控件中绘制。我想这一切的部分原因在于 Swing 是(a)非常复杂,(b)没有 L&F 实际上遵守合同,甚至 Nimbus 也没有,尽管它是最新、最酷的。
| 归档时间: |
|
| 查看次数: |
1505 次 |
| 最近记录: |