gpt4 book ai didi

java - 使用 Nimbus 和 Java 8U20 时 JList 中的颜色错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:13 27 4
gpt4 key购买 nike

自从我更新到最新的 Java 8 版本 (U20) 后,我的应用程序为 JList 使用了错误的颜色。例如。实际使用的是浅灰色,而不是选定项目的深蓝色。

简单的测试应用:

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;



public class Test {

public Test() {
try {
UIManager.setLookAndFeel(new NimbusLookAndFeel());

JList<String> l = new JList<>();
DefaultListModel<String> model = new DefaultListModel<>();
model.add(0, "sssssssss");
model.add(1, "sssssssss");
model.add(2, "sssssssss");
model.add(3, "sssssssss");
l.setModel(model);

JFrame f = new JFrame();
f.setSize(500, 500);
f.setLocationRelativeTo(null);
f.add(l);
f.pack();
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setVisible(true);
}
catch (Exception e) {
e.printStackTrace();
}
}


public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
new Test();
}
});
}
}

Java 7、Java 8

Java 7, Java 8 <U20

Java 8 U20:

Java 8 U20

JList.getSelectionBackground() 返回

DerivedColor(color=57,105,138 parent=nimbusSelectionBackground offsets=0.0,0.0,0.0,0 pColor=57,105,138

但实际上不是RGB(57,105,138)而是上面提到的浅灰色。

最佳答案

您可以使用以下初始化代码恢复 1.8.0_20 之前版本的确切行为:

final NimbusLookAndFeel laf = new NimbusLookAndFeel();
UIManager.setLookAndFeel(laf);
UIDefaults defaults = laf.getDefaults();
defaults.put("List[Selected].textForeground",
laf.getDerivedColor("nimbusLightBackground", 0.0f, 0.0f, 0.0f, 0, false));
defaults.put("List[Selected].textBackground",
laf.getDerivedColor("nimbusSelectionBackground", 0.0f, 0.0f, 0.0f, 0, false));
defaults.put("List[Disabled+Selected].textBackground",
laf.getDerivedColor("nimbusSelectionBackground", 0.0f, 0.0f, 0.0f, 0, false));
defaults.put("List[Disabled].textForeground",
laf.getDerivedColor("nimbusDisabledText", 0.0f, 0.0f, 0.0f, 0, false));
defaults.put("List:\"List.cellRenderer\"[Disabled].background",
laf.getDerivedColor("nimbusSelectionBackground", 0.0f, 0.0f, 0.0f, 0, false));

这将还原类 NimbusDefaults1.8.0_051.8.0_20 之间发生的变化。参数 false 已被删除(通过重载方法将其有效地变为 true)。此更改将 Color 转换为 UIResource,这在形式上可能是正确的,但无论出于何种原因,它都会导致您遇到的问题。因此,重新插入 false 会恢复旧行为。

关于java - 使用 Nimbus 和 Java 8U20 时 JList 中的颜色错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25685269/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com