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

JavaFX:如何通过CSS和FXML动态调整TextArea字体大小(25%-225%)

问题

需要实现TextArea字体大小按25%-225%的比例动态调整,最终从配置文件加载缩放比例。当前相关代码如下:

FXML代码:

<TextArea fx:id="txtDescription" layoutY="25.0" prefHeight="471.0" prefWidth="1036.0" />

CSS代码:

.text-area { -fx-font-size: 25; }

在MainController中已通过@FXML private TextArea txtDescription;获取控件引用,但执行以下代码无法获取样式信息:

System.out.println("Get Style: " + txtDescription.getStyle());
System.out.println("Get StyleNode: " + txtDescription.getStyleableNode());

解决方案

步骤1:确定基准字体大小

以CSS中设置的默认字体大小25px作为基准值,可在控制器初始化时将其保存为变量(比如private double baseFontSize = 25;),方便后续计算。

步骤2:从配置文件加载缩放比例

使用Java的Properties类读取配置文件中的缩放比例,将百分比转为0.25-2.25之间的浮点数(对应25%-225%),示例代码:

Properties config = new Properties();
try (InputStream input = getClass().getResourceAsStream("/config.properties")) {
    config.load(input);
    // 读取配置值,默认100%(即1.0)
    String scaleStr = config.getProperty("fontScale", "100%");
    double scale = Double.parseDouble(scaleStr.replace("%", "")) / 100;
    // 限制比例在合法范围内
    scale = Math.max(0.25, Math.min(2.25, scale));
} catch (IOException e) {
    e.printStackTrace();
}

步骤3:动态设置TextArea字体大小

有两种可靠实现方式:

方式一:设置Inline样式

通过setStyle直接覆盖字体大小,优先级高于外部CSS样式:

double calculatedSize = baseFontSize * scale;
txtDescription.setStyle("-fx-font-size: " + calculatedSize + "px;");

方式二:使用Font对象设置(推荐)

该方式不会覆盖控件其他Inline样式,灵活性更高:

double calculatedSize = baseFontSize * scale;
Font currentFont = txtDescription.getFont();
txtDescription.setFont(Font.font(currentFont.getFamily(), calculatedSize));

补充:样式获取无结果的原因

getStyle()仅返回控件直接设置的Inline样式(如FXML中style属性定义的内容),而CSS样式表中的样式属于外部样式,不会被该方法返回。若要获取控件实际生效的字体大小,可使用txtDescription.getFont().getSize()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:15:33