使用Nimbus和Java 8U20时JList中的颜色错误
我的应用程序对JList使用了错误的颜色,因为我更新到了最新的Java 8版本(U20)。例如,所选项目不使用深蓝色,而是使用浅灰色 简单测试应用:使用Nimbus和Java 8U20时JList中的颜色错误,java,swing,java-8,look-and-feel,nimbus,Java,Swing,Java 8,Look And Feel,Nimbus,我的应用程序对JList使用了错误的颜色,因为我更新到了最新的Java 8版本(U20)。例如,所选项目不使用深蓝色,而是使用浅灰色 简单测试应用: import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.p
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();
}
});
}
}
...
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
...
UIManager.getLookAndFeelDefaults().put("List[Selected].textBackground", new Color(57, 105, 138));
UIManager.getLookAndFeelDefaults().put("List[Selected].textForeground", Color.WHITE);
但实际上它不是RGB(57105138),而是上面提到的浅灰色。我也有同样的问题。
下面是我如何为我的应用程序解决它的:
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();
}
});
}
}
...
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
...
UIManager.getLookAndFeelDefaults().put("List[Selected].textBackground", new Color(57, 105, 138));
UIManager.getLookAndFeelDefaults().put("List[Selected].textForeground", Color.WHITE);
以下是UIManager(颜色)键的列表:
希望这对你有帮助
编辑:使用您提供的代码进行测试。它起作用了
致以最诚挚的问候您可以使用以下初始化代码还原
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));
这将还原类
NimbusDefaults
中1.8.0_05
和1.8.0_20
之间发生的更改。已删除参数false
(通过重载方法将其有效地转换为true
)。此更改将颜色
s转换为UIResource
s形式上可能正确的颜色,但无论出于何种原因,它都会导致您遇到问题。因此,重新插入false
将恢复旧的行为。使用1.8.0_05
显示您想要的颜色。更改必须是在该版本和1.8.0\u 20
之间引入的。在这些版本之间,我能看到的唯一更改是Color
现在是uUIResource
,即类是DerivedColor$UIResource
而不是DerivedColor
。