java - 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 中,菜单将以绿色和红色背景为例
解决方案
您是否尝试过实现 SystemColor 对象?SystemColors 可以改变。它们的红/绿/蓝值与底层操作系统主题相关。例如,如果用户更改其操作系统主题的文本突出显示颜色,则 SystemColor.textHighlight 会随之更改。在下一次重绘时,任何使用该 SystemColor 对象的 Java 组件都将使用用户更新后的颜色进行重绘。
SystemColors 的这一特性允许 Java 应用程序使用配色方案绘制用户界面,这些配色方案跟踪用户自己的操作系统配色方案偏好。对于大多数情况,例如您的情况,不需要特殊的应用程序编码。希望这可以帮助!
- 罗宾。
推荐阅读
- python - 优化 CBOR 读取函数以将数据传递到 numpy
- blockchain - 锯齿验证器中需要备份(分类帐)的文件有哪些
- javascript - reactJS 下拉菜单中的样式调整
- javascript - BackgroundImage 没有在 JSX 中显示?
- android - 应用程序和本地电脑之间的通信系统应该如何?
- javascript - ReduxThunk 如何将操作数据传递到原始状态?
- javascript - 使用 symfoy 使用 AJAX 上传时文件未上传
- c# - 如何创建允许我根据网格移动精灵/对象的 C# 脚本
- google-apps-script - 在 Clockify 中启动计时器的 Google 脚本
- javascript - javascript中文件中对象的单个实例