You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JButton调用deriveFont(float size)无法修改字体大小?

为什么Java Swing中deriveFont(float size)单参数方法没生效?

这个问题其实是Java方法重载的参数匹配规则在搞鬼,我来给你掰扯清楚~

首先得搞明白Font类里deriveFont的几个重载方法:

  • public Font deriveFont(int style):这个方法是用来修改字体样式的(比如粗体、斜体),参数是int类型的样式常量,比如Font.BOLD、Font.ITALIC,或者它们的组合(比如Font.BOLD | Font.ITALIC)。
  • public Font deriveFont(float size):这个才是专门用来修改字体大小的方法,参数是float类型的字号。
  • public Font deriveFont(int style, float size):同时修改字体样式和大小的重载方法。

现在看你的代码:

prevButton.setFont(prevButton.getFont().deriveFont(90));

这里你传入的90是int类型的字面量。Java编译器在匹配重载方法时,会优先选择参数类型完全匹配的那个——也就是deriveFont(int style),而不是需要把int自动转换为float的deriveFont(float size)。

那把90当成样式参数会发生什么?Font的样式是用位掩码定义的,合法的样式值只有Font.PLAIN(0)、Font.BOLD(1)、Font.ITALIC(2)这几个基础值,以及它们的组合。90这个值完全不在合法范围内,Java会把它默认处理成Font.PLAIN(普通样式),所以最终的字体还是原来的大小,样式也变回了普通,看起来就像“没改变大小”。

而当你调用:

prevButton.setFont(prevButton.getFont().deriveFont(Font.BOLD, 90));

这个是明确匹配双参数的重载方法,第一个参数是合法的样式常量,第二个参数虽然是int,但会自动转换为float作为字号,所以就能正确设置字体的样式和大小了。

如果就是想用单参数方法修改大小,也很简单——把参数改成float类型就行,比如:

prevButton.setFont(prevButton.getFont().deriveFont(90f));

这样编译器就会匹配到deriveFont(float size)这个重载,就能正常修改字号了。

内容的提问来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:33:16