如何通过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
相关产品推荐
相关产品推荐

