【问题标题】:Can't modify SystemLookAndFeel under Windows 7在 Windows 7 下无法修改 SystemLookAndFeel
【发布时间】:2011-03-29 10:57:41
【问题描述】:

我在使用 Windows 7 下的 Swing SystemLookAndFeel 时遇到了一个微妙的问题。下面的小程序设置了 SystemLookAndFeel,然后修改了 MenuBar 和 MenuItem 的背景颜色。这在 Windows XP 上运行良好,并且在 Windows 7 中也运行良好,激活了 Windows Classic 主题。但它对 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() {}
}

【问题讨论】:

    标签: java swing windows-7


    【解决方案1】:

    马丁你可以用这个代替

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

    【讨论】:

      【解决方案2】:

      Windows 7 可能使用NimbusLookAndFeel,它有自己的defaults 和与define colors 不同的方式。

      附录:如果没有,你可能需要指定一个ColorUIResource,例如

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

      【讨论】:

      • 感谢您的链接,垃圾神。 Nimbus 外观已安装,但系统默认显示为“Microsoft Windows 外观 - com.sun.java.swing.plaf.windows.WindowsLookAndFeel”。此外,使用 ColorUIResource 不会改变任何东西。它对你有用吗?还有其他想法吗?
      • @Martin:对不起,不。我可以确认您的结果,并且我看到了 Aqua 的预期行为。 Windows L&F 可能会简单地忽略菜单默认值,但我没有参考。
      • 感谢您的帮助。当我设法重新激活我的帐户时,我会尝试 Java 论坛。或者我了解如何向 Oracle 提交错误。
      【解决方案3】:

      我的问题已在Oracle Java Forum 中得到解答:

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

      这似乎太对了。

      马丁。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-17
        • 2012-12-09
        • 1970-01-01
        • 1970-01-01
        • 2019-07-05
        相关资源
        最近更新 更多