无法在Windows 7下修改SystemLookAndFeel

时间:2010-08-13 12:37:00

标签: java swing windows-7

我在Windows 7下使用Swing SystemLookAndFeel遇到了一个微妙的问题。下面的applet设置了SystemLookAndFeel,然后修改了MenuBar和MenuItem的背景颜色。这与Windows XP完美配合,并且在Windows 7中激活Windows经典主题时效果也很好。但它对Windows 7标准主题没有影响。有人有解释吗?

问候,马丁。

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JApplet;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

@SuppressWarnings("serial")
public class Win7TestApplet extends JApplet {

    public void init() {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            UIManager.put("MenuBar.background", Color.decode( "#efecea" ));
            UIManager.put("MenuItem.background", Color.decode( "#9999ff" ));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }

        // Setup panel
        JPanel mainPanel = new JPanel();
        mainPanel.setBackground( Color.white );
        mainPanel.setLayout( new BorderLayout() );
        mainPanel.setOpaque( true );
        this.getContentPane().add( mainPanel, BorderLayout.CENTER );

        // Create menubar
        JMenuBar menuBar = new JMenuBar();
        getContentPane().add(menuBar, BorderLayout.NORTH);

        // Add menu
        JMenu m_file = new JMenu( "File" );
        menuBar.add( m_file );

        // Add menu items
        m_file.add( new JMenuItem( "First item" ) );
        m_file.add( new JMenuItem( "Second item" ) );
    }

    public void start() {}
    public void stop() {}
    public void destroy() {}
}

3 个答案:

答案 0 :(得分:2)

Martin你可以用它代替

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");

答案 1 :(得分:1)

Windows 7可能会使用NimbusLookAndFeeldefaults拥有自己的define colorsColorUIResource的不同方式。

附录:如果没有,您可能需要指定{{3}},例如

UIManager.put("MenuBar.background",
    new ColorUIResource(Color.decode("#efecea")));

答案 2 :(得分:0)

我在Oracle Java Forum

中回答了我的问题
  

LookAndFeels 不需要使用   任何特定的UIManager属性。

这似乎太对了。

马丁。