Windows 7下无法修改SystemLookAndFeel

发布于 2024-09-14 09:05:36 字数 1924 浏览 3 评论 0原文

我在 Windows 7 下遇到了 Swing SystemLookAndFeel 的一个微妙问题。下面的小程序设置 SystemLookAndFeel,然后修改 MenuBar 和 MenuItem 的背景颜色。这与 Windows XP 完美配合,也与激活了 Windows 经典主题的 Windows 7 配合良好。但它对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() {}
}

I'm experiencing a subtle issue with the Swing SystemLookAndFeel under Windows 7. The applet below sets the SystemLookAndFeel and then modifies the background colour of MenuBar and MenuItem. This works perfectly well with Windows XP and it works also well with Windows 7 having the Windows Classic theme activated. But it has no effect with the Windows 7 standard theme. Does anyone have an explanation for it?

Regards, Martin.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

网名女生简单气质 2024-09-21 09:05:36

马丁,你可以用这个代替

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

Martin you can use this instead

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
半岛未凉 2024-09-21 09:05:36

Windows 7 可以使用 NimbusLookAndFeel,它有自己的默认值和一种不同的方式定义颜色

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

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

Windows 7 may use the NimbusLookAndFeel, which has its own defaults and a different way to define colors.

Addendum: If not, you may need to specify a ColorUIResource, for example

UIManager.put("MenuBar.background",
    new ColorUIResource(Color.decode("#efecea")));
牵你的手,一向走下去 2024-09-21 09:05:36

我的问题在 Oracle Java 论坛 中得到了解答:

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

这似乎是太正确了。

马丁.

I got my question answered in the Oracle Java Forum:

LookAndFeels aren't required to use
any particular UIManager properties.

It seems to be just too right.

Martin.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文