摇摆如何允许用户选择的主题



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

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

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到颜色:菜单jpanel 2至颜色:背景

主题1中的位置,然后菜单可能为灰色,背景可能为蓝色。主题2中的菜单将是绿色和背景红色作为示例

作为@madprogrammer在评论中已经提到的 - 通常不建议在运行时更改外观(l& f(,因为这可能会导致许多不必要的行为和潜在的问题。

更具体 - 不同的l& fs将具有不同大小的组件,间距,边界和整体视觉样式(除非您使用相同的l& f,但具有不同的主题/皮肤(。这将使您的应用程序UI在许多情况下对这些不同的L& fs的外观和执行不一致,尤其是如果您想要的只是Dark&轻主题,但使用相同的UI布局/样式。在运行时更改l& f也可能在某种程度上重置某些组件的状态,这可能会导致应用程序中的逻辑错误。

更好的方法是使用单个L& f支持黑暗和光线(或任何其他(主题/皮肤,因为只要您仅在相同的L&amp的不同实现/配置之间进行更改,肯定会有更少的问题。f作为L& f开发人员很可能是因为这种可能性。您可以在另一个主题上找到当前可用的L& fs的综合列表:Java外观和感觉(L& f(

,如果您准备投资于此,写下自己的L& f也可能是一个很好的解决方案。但是不要误会,这不是一件容易的事,需要花费大量时间和摇摆知识来创建一个。秋千和l& f api尤其是有记录的很差,而原始开发人员没有提供有关如何制作一个的提示。您只能走试验和错误的道路。

您是否尝试过实现SystemColor对象?SystemColors可以改变。它们的红色/绿色/蓝色值与基础操作系统主题相关。例如,如果用户更改其OS主题的文本突出显示颜色,则SystemColor.texthighlight随之而变化。在下一个Redraw中,任何使用该SystemColor对象的Java组件都用用户的更新颜色重新绘制。

SystemColors的此功能允许Java应用程序绘制用户接口的配色方案,以跟踪用户自己的OS配色方案偏好。在大多数情况下,不需要特殊的申请编码。希望这会有所帮助!

  • 罗宾。

最新更新