Java windows外观中的Nimbus进度条

Java windows外观中的Nimbus进度条,java,swing,progress-bar,look-and-feel,nimbus,Java,Swing,Progress Bar,Look And Feel,Nimbus,我看到这个帖子: 这正是我想要的相反方向,我想使用系统(windows)的外观,但有nimbus progressbar 到目前为止,我的代码是: private void setLookAndFeel(){ // set nimbus look&feel for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName

我看到这个帖子:

这正是我想要的相反方向,我想使用系统(windows)的外观,但有nimbus progressbar

到目前为止,我的代码是:

private void setLookAndFeel(){

    // set nimbus look&feel
    for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
        if ("Nimbus".equals(info.getName())) {
            try {
                UIManager.setLookAndFeel(info.getClassName());
            } catch (ClassNotFoundException | InstantiationException
                    | IllegalAccessException
                    | UnsupportedLookAndFeelException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            break;
        }
    }

    // copy progress bar defaults
    HashMap<Object, Object> progressDefaults = new HashMap<>();
    for(Map.Entry<Object, Object> entry : UIManager.getDefaults().entrySet()){
        if(entry.getKey().getClass() == String.class && ((String)entry.getKey()).startsWith("ProgressBar")){
            progressDefaults.put(entry.getKey(), entry.getValue());
        }
    }

    // set system look&feel
    try {
        UIManager.setLookAndFeel(
                UIManager.getSystemLookAndFeelClassName());
        SwingUtilities.updateComponentTreeUI(this);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Couldn't use system look and feel: " + e);
    } 

    // copy back progress bar defaults
    for(Map.Entry<Object, Object> entry : progressDefaults.entrySet()){
        System.out.println(entry.getKey().toString() + ": " + entry.getValue());
        UIManager.put(entry.getKey(), entry.getValue()); //getDefaults().
    }
    System.out.println("lookAndFeel " + UIManager.getLookAndFeel());
}
private void setLookAndFeel(){
//设置nimbus外观和感觉
for(LookAndFeelInfo:UIManager.getInstalledLookAndFeels()){
if(“Nimbus”.equals(info.getName())){
试一试{
UIManager.setLookAndFeel(info.getClassName());
}catch(ClassNotFoundException |实例化异常
|非法访问例外
|不受支持的外观(e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
打破
}
}
//复制进度条默认值
HashMap progressDefaults=新的HashMap();
对于(Map.Entry:UIManager.getDefaults().entrySet()){
if(entry.getKey().getClass()==String.class&((String)entry.getKey()).startsWith(“ProgressBar”)){
progressDefaults.put(entry.getKey(),entry.getValue());
}
}
//设置系统外观和感觉
试一试{
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(此);
}捕获(例外e){
showMessageDialog(null,“无法使用系统外观:”+e);
} 
//复制回进度条默认值
对于(Map.Entry:progressDefaults.entrySet()){
System.out.println(entry.getKey().toString()+“:”+entry.getValue());
UIManager.put(entry.getKey(),entry.getValue());//getDefaults()。
}
System.out.println(“lookAndFeel”+UIManager.getLookAndFeel());
}
但如果我编译,我会收到错误消息:

com.sun.java.swing.plaf.windows.WindowsLookAndFeel不能强制转换为>javax.swing.plaf.nimbus.NimbusLookAndFeel

我在这里初始化进度条

如果有人能向我解释发生了什么和/或如何在系统(windows)的外观和感觉上获得一个nimbus外观的progressbar,我将非常高兴。 我主要对玻璃感兴趣


编辑:如果不将progressbar默认值复制回来,则错误消失。

我不知道问题出在哪里,但解决方案如下: 将方法分为两部分(直接在“//复制进度条默认值”之前)。 然后调用设置nimbus外观的方法,然后调用初始化类变量的方法(并使用progressbar)。 第三,使用“//复制进度条默认值”开头的所有内容调用新方法。(该方法将从nimbus外观复制progressbar默认值,设置系统外观,然后粘贴progressbar默认值)


这一行只是为了解决这个令人敬畏的验证码废话而添加的。

我不知道问题出在哪里,但解决方案如下: 将方法分为两部分(直接在“//复制进度条默认值”之前)。 然后调用设置nimbus外观的方法,然后调用初始化类变量的方法(并使用progressbar)。 第三,使用“//复制进度条默认值”开头的所有内容调用新方法。(该方法将从nimbus外观复制progressbar默认值,设置系统外观,然后粘贴progressbar默认值)


这一行只是为了解决这个令人敬畏的验证码废话而添加的。

您显示的代码中没有ProgressBar或强制转换。抛出错误的那一行是pb=new JProgressBar(0,100);您显示的代码中没有ProgressBar或强制转换;