我看过这篇文章: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外观的进度条我会很高兴。 我主要对玻璃效果感兴趣。
编辑:如果我没有复制进度条默认值,则错误消失。
答案 0 :(得分:0)
我不知道问题是什么,但解决方案如下: 将方法分为两部分(直接在&#34; //复制进度条默认值&#34;之前)。 然后调用设置nimbus外观和感觉的方法,然后调用初始化类变量的方法(以及使用进度条)。 第三,使用从&#34; //复制进度条默认值&#34;开始的所有内容调用新方法。 (该方法将从nimbus外观和感觉复制进度条默认值,设置系统外观,然后粘贴进度条默认值。)
这一行只是作为一种解决方法添加到AWEFUL验证码废话中。