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

使用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

我的应用程序对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.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
现在是u
UIResource
,即类是
DerivedColor$UIResource
而不是
DerivedColor