首页 > 解决方案 > Swing 我如何允许用户选择的主题?

问题描述

我正在尝试允许用户更改应用程序主题,例如暗/亮等。

为此,到目前为止,我一直在使用:

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if (newTheme.equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        SwingUtilities.updateComponentTreeUI(getRootPane());
                    }
                });


                break;
            }
        }
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
    }

我不确定我是否真的应该改变整个外观和感觉。使用这种方法的问题是,我看不到将 jPanel 设置为任何会随着主题而改变的东西。

我的意思的一个例子是设置:jPanel 1 to color: menu jpanel 2 to color: background

在主题 1 中,菜单可能是灰色的,背景可能是蓝色的。在主题 2 中,菜单将以绿色和红色背景为例

标签: javaswinglook-and-feel

解决方案


您是否尝试过实现 SystemColor 对象?SystemColors 可以改变。它们的红/绿/蓝值与底层操作系统主题相关。例如,如果用户更改其操作系统主题的文本突出显示颜色,则 SystemColor.textHighlight 会随之更改。在下一次重绘时,任何使用该 SystemColor 对象的 Java 组件都将使用用户更新后的颜色进行重绘。

SystemColors 的这一特性允许 Java 应用程序使用配色方案绘制用户界面,这些配色方案跟踪用户自己的操作系统配色方案偏好。对于大多数情况,例如您的情况,不需要特殊的应用程序编码。希望这可以帮助!

  • 罗宾。

推荐阅读