Nimbus进度条在窗户的外观和感觉

时间:2015-11-13 14:02:49

标签: java swing progress-bar look-and-feel nimbus

我看过这篇文章:how to make Indeterminate progressbar look nicely?

这正是我想要的方向,我想使用System(windows)的外观和感觉,但是有nimbus进度条。

到目前为止我的代码:

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());
}

但如果我编译,我收到错误消息:

  

com.sun.java.swing.plaf.windows.WindowsLookAndFeel无法转换为&gt; javax.swing.plaf.nimbus.NimbusLookAndFeel

我初始化进度条。

如果有人可以向我解释发生了什么和/或如何在系统(windows)外观上获得具有nimbus外观的进度条我会很高兴。 我主要对玻璃效果感兴趣。

编辑:如果我没有复制进度条默认值,则错误消失。

1 个答案:

答案 0 :(得分:0)

我不知道问题是什么,但解决方案如下: 将方法分为两部分(直接在&#34; //复制进度条默认值&#34;之前)。 然后调用设置nimbus外观和感觉的方法,然后调用初始化类变量的方法(以及使用进度条)。 第三,使用从&#34; //复制进度条默认值&#34;开始的所有内容调用新方法。 (该方法将从nimbus外观和感觉复制进度条默认值,设置系统外观,然后粘贴进度条默认值。)

这一行只是作为一种解决方法添加到AWEFUL验证码废话中。