【发布时间】:2019-06-26 21:43:34
【问题描述】:
我正在尝试允许用户更改应用程序主题,例如暗/亮等。
到目前为止,我一直在使用:
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 中,菜单将以绿色和红色背景为例
【问题讨论】:
-
一般来说,不建议在 UI 建立后更改外观,是的,我知道有“官方”示例证明了这一点,但这更像是一个副作用功能和 Swing 团队实际上不鼓励它。但是,您可能会使用“剥皮”方法获得更好的运气,这可能会为您提供一种更简单的方法来实现相同的整体结果,但您仍然需要通知所有组件的更改
标签: java swing look-and-feel