【发布时间】:2010-10-31 06:21:48
【问题描述】:
我尝试将全局字体设置为稍大:
UIManager.put("defaultFont", new Font(Font.SANS_SERIF, 0, 16));
...仅适用于菜单,但没有其他(按钮、标签)。
我尝试用
更改标签和按钮字体UIManager.put("Button.font", new Font(Font.SANS_SERIF, 0, 16));
UIManager.put("Label.font", new Font(Font.SANS_SERIF, 0, 16));
但字体保留。
唯一对我有用的是派生字体:
someButton.setFont(someButton.getFont().deriveFont(16f));
但这不是一个选项,因为必须为 每个 手动元素。
注意,为 UIManager 派生字体也不起作用:
UIManager.put("Label.font",
UIManager.getFont("Label.font").deriveFont(16f));
我在 Linux 和 Windows 下测试了所有内容:行为相同。
我只是无法理解 API 怎么会如此混乱。如果调用了一个方法 setFont(..) 然后 我希望它 设置字体。如果此方法失败 在任何可能的情况下设置字体,那么它应该被弃用。
编辑:
这个问题不仅适用于 Nimbus,也适用于默认的 LAF。
【问题讨论】:
-
您是否尝试在更新 UI 默认值后调用
SwingUtilities.updateComponentTreeUI(frame);? -
该代码甚至无法编译;没有将浮点数作为第三个参数的 Font 构造函数。
-
该代码是不需要编译的示例代码;)在实际代码中,我使用了静态变量,当我删除它们以执行此示例时,我正在查看deriveFont(. .) 需要浮动。
-
SwingUtilities.updateComponentTreeUI(frame) 也无济于事
-
实际上 Nimbus 具有“Label.font”属性,但当用户定义自定义值时它不起作用。这可能是另一个 Nimbus/Synth 错误。在此之前我遇到过类似的问题,这就是为什么我选择 Metal/Basic 具有自定义 LAF 的基础。
标签: java swing user-interface fonts nimbus