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

如何通过JavaFX的FontSelectorDialog修改TextArea的字体样式与大小?

解决JavaFX FontSelectorDialog选择字体后更新TextArea的问题

嘿,我发现你代码里的问题啦——你用了fontSelectorDialog.show()来打开对话框,这个方法是非阻塞的,调用之后会立刻往下执行textarea.setFont(...),这时候用户可能还没选好字体甚至还没点确定,自然拿不到有效的字体对象。

咱们改成用showAndWait()就可以解决这个问题,它会阻塞当前线程,直到用户关闭对话框,然后返回一个Optional<Font>对象,咱们可以通过它判断用户是否确认了选择,再更新TextArea的字体。

修正后的代码如下:

public void ChangeFontStyle() {
    fontstyle.setOnAction(e -> {
        // 初始化对话框时,可以传入TextArea当前的字体,让对话框默认显示当前样式(可选但更友好)
        Font currentFont = textarea.getFont();
        FontSelectorDialog fontSelectorDialog = new FontSelectorDialog(currentFont);
        
        fontSelectorDialog.setTitle("Select Font");
        
        // 用showAndWait()等待用户操作完成
        fontSelectorDialog.showAndWait().ifSelected(selectedFont -> {
            // 用户点击确定后,把选中的字体应用到TextArea
            textarea.setFont(selectedFont);
        });
    });
}

关键点解释:

  • showAndWait()返回Optional<Font>,如果用户点击「确定」,里面就包含选中的字体;如果点击「取消」,则为空。
  • 用ifSelected()方法可以安全地处理用户确认的情况,避免空指针问题。
  • 初始化对话框时传入TextArea当前的字体currentFont,能让用户打开对话框时看到当前正在使用的字体,体验更好。

这样修改后,用户选择字体并点击确定,TextArea的字体样式就会立刻更新啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:06:22