我尝试调整Nimbus外观的颜色,但是只有部分生效。特别是在调整菜单栏的颜色方面遇到了问题。
以下是一个运行示例:
您可以看到,我能够设置控件的背景,并设置JMenuItem的前景色。但是我不能更改JMenuItem的背景颜色,也不能更改菜单栏的颜色。我尝试了很多来自http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html的键,但我无法更改menubar的颜色。
另一个问题是?为什么在设置外观和感觉之前必须调整颜色一次,在设置外观和感觉后再调整一次?为什么必须调用一次'UIManager.put()'和一次'UIManager.getLookAndFeelDefaults()。put()'?
对我来说,Nimbus真的很有缺陷,不适合专业使用。我尝试使用JDK 1.6.35和JDK 1.7.7,但两个JDK都无法以所需的方式运行系统?
有没有建议如何调整Nimbus LookAnd Feel中menubar的颜色?
提前致谢
以下是一个运行示例:
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.UnsupportedLookAndFeelException;
public class JMenuColorTest extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
adjustLAF();
} catch (Exception e) {
e.printStackTrace();
}
JMenuColorTest test = new JMenuColorTest();
test.setDefaultCloseOperation(EXIT_ON_CLOSE);
test.setPreferredSize(new Dimension(400, 300));
test.pack();
test.setLocationRelativeTo(null);
JMenuBar menuBar = new JMenuBar();
JMenu menu1 = new JMenu("Menu 1");
menu1.add(new JMenuItem("Item 1.1"));
menu1.add(new JMenuItem("Item 1.2"));
menu1.add(new JMenuItem("Item 1.3"));
menuBar.add(menu1);
JMenu menu2 = new JMenu("Menu 2");
menu2.add(new JMenuItem("Item 2.1"));
menu2.add(new JMenuItem("Item 2.2"));
menu2.add(new JMenuItem("Item 2.3"));
menuBar.add(menu2);
test.setJMenuBar(menuBar);
test.setVisible(true);
}
private void adjustLAF() throws ClassNotFoundException,
InstantiationException, IllegalAccessException,
UnsupportedLookAndFeelException {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
// Working
UIManager.put("control", Color.GREEN);
// Not working
UIManager.getLookAndFeelDefaults().put(
"MenuItem[Enabled].textForeground", Color.RED);
// Set the look and feel
UIManager.setLookAndFeel(info.getClassName());
// Not working
UIManager.put("control", Color.GREEN);
// Working
UIManager.getLookAndFeelDefaults().put(
"MenuItem[Enabled].textForeground", Color.RED);
break;
}
}
}
});
}
}
您可以看到,我能够设置控件的背景,并设置JMenuItem的前景色。但是我不能更改JMenuItem的背景颜色,也不能更改菜单栏的颜色。我尝试了很多来自http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html的键,但我无法更改menubar的颜色。
另一个问题是?为什么在设置外观和感觉之前必须调整颜色一次,在设置外观和感觉后再调整一次?为什么必须调用一次'UIManager.put()'和一次'UIManager.getLookAndFeelDefaults()。put()'?
对我来说,Nimbus真的很有缺陷,不适合专业使用。我尝试使用JDK 1.6.35和JDK 1.7.7,但两个JDK都无法以所需的方式运行系统?
有没有建议如何调整Nimbus LookAnd Feel中menubar的颜色?
提前致谢
Runnable
之前调用静态的adjustLAF
似乎在Mac OS X Aqua上有效。 - trashgod