Swing - 更改 Windows 主题会重置自定义边框、插图和背景
Swing - Changing the Windows Theme resets custom border, insets and backgrounds
更改 windows 主题/设计时,UI 会对这些更改作出反应,重置自定义组件背景、边框和插图。
例如,我们有一些 JScrollPane
,其中我们将 Border
设置为 null
。每个 JScrollPane
s Border
都会重置为其自定义值,这是非 null
.
的值
通过 UIManager.put(...)
设置给定的键也不会显示任何效果,因为 UIManager
值不会应用于此类重置。
除了编写自定义 L&F 之外,是否有任何方法可以绕过这些自动重置,这对于这种最小的好处来说会花费太长时间,有什么方法可以解决这个问题吗?
一些运行时信息(以防有人想知道):
- OS: Windows 10 64 位
- JDK: 8u172 64 位
Look-n-Feel 的重置提供了所有边框、颜色、字体等的全局重置。尤其是当它们重置为 null
时。因此,如果你想保护你的边界不受此重置的影响,你需要替换:
myComponent.setBorder(null);
至
myComponent.setBorder(BorderFactory.createEmptyBorder());
更改 windows 主题/设计时,UI 会对这些更改作出反应,重置自定义组件背景、边框和插图。
例如,我们有一些 JScrollPane
,其中我们将 Border
设置为 null
。每个 JScrollPane
s Border
都会重置为其自定义值,这是非 null
.
通过 UIManager.put(...)
设置给定的键也不会显示任何效果,因为 UIManager
值不会应用于此类重置。
除了编写自定义 L&F 之外,是否有任何方法可以绕过这些自动重置,这对于这种最小的好处来说会花费太长时间,有什么方法可以解决这个问题吗?
一些运行时信息(以防有人想知道):
- OS: Windows 10 64 位
- JDK: 8u172 64 位
Look-n-Feel 的重置提供了所有边框、颜色、字体等的全局重置。尤其是当它们重置为 null
时。因此,如果你想保护你的边界不受此重置的影响,你需要替换:
myComponent.setBorder(null);
至
myComponent.setBorder(BorderFactory.createEmptyBorder());