繁体   English   中英

Swing如何允许用户选择主题?

[英]Swing How do I allow a User-Selected Theme?

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

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

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中,菜单将为绿色,背景为红色

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

SystemColors的此功能允许Java应用程序使用跟踪用户自己的OS配色方案首选项的配色方案绘制用户界面。 对于大多数情况(例如您的情况),不需要特殊的应用程序编码。 希望这可以帮助!

  • 罗宾

正如@madprogrammer在评论中已经提到的那样-通常不建议在运行时更改外观(L&F),因为它可能会导致许多不良行为和潜在问题。

更具体地说-不同的L&F将具有不同的组件大小,间距,边框和整体视觉样式(除非您使用相同的L&F,但主题/外观不同)。 在许多情况下,这会使您的应用程序UI外观和在不同的L&F上的表现不一致,尤其是如果您想要的只是具有深色和浅色主题但UI布局/样式相同的情况。 在运行时更改L&F可能还会在某种程度上将某些组件的状态重置,这可能会导致应用程序出现逻辑错误。

更好的方法是使用支持深色和浅色(或任何其他)主题/外观的单个L&F,因为如果您仅在与L&F开发人员相同的L&F的不同实现/配置之间进行更改,肯定会减少问题的发生。造成了这种可能性。 您可以在以下SO主题中找到当前可用L&F的完整列表: Java外观(L&F)

尽管编写自己的L&F也可能是一个不错的解决方案,如果您准备投资的话。 但是请不要误会,这不是一件容易的事,并且需要很多时间和Swing知识来创建一个。 特别是,Swing和L&F API的文档记录很少,原始开发人员并未提供很多有关如何制作一个的提示。 您只能走反复试验之路。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM