为啥 JavaFX 应用程序和场景生成器显示乱码?
Posted
技术标签:
【中文标题】为啥 JavaFX 应用程序和场景生成器显示乱码?【英文标题】:Why JavaFX application and scene builder is showing garbled text?为什么 JavaFX 应用程序和场景生成器显示乱码? 【发布时间】:2021-06-19 03:56:20 【问题描述】:我的场景构建器如下所示:
这是图形用户界面:
独立的场景构建器:
我只是从 Java SDK 演示中运行以下源代码:
package sample;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Button;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.stage.Stage;
public class Main extends Application
@Override
public void start(Stage primaryStage) throws Exception
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
Button btn = new Button();
btn.setText("Say 'Hello World'!");
StackPane root_ctn = new StackPane();
root_ctn.getChildren().add(btn);
btn.setOnAction(new EventHandler<ActionEvent>()
@Override
public void handle(ActionEvent actionEvent)
System.out.println("Hello World!");
);
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root_ctn, 300, 275));
primaryStage.show();
public static void main(String[] args)
launch(args);
文本看起来不错的唯一地方是在控制台中。
View idea.log
【问题讨论】:
看看***.com/questions/14091011/…是否有帮助。 @Sedrick 编辑器已设置为 UTF8。无论如何,谢谢! YouParent root
,从 fxml 加载,从未使用过。这是故意的吗?如果相关:请出示 FXML。
该系统的默认语言环境是什么?尝试使用-Duser.language=en -Duser.country=US
运行它
@Puce 是的,我正在尝试一些代码,所以我添加了自己的“root”来进行测试。谢谢,我会添加语言环境,看看它是否有效。
【参考方案1】:
我还没有找到解决方案,但我发现了一个有趣的模式:
在您的 Gluon Scene Builder 屏幕截图上,写有 Pgy Rtqlgev
,它应该是 New Project
,而 Qrgp Rtqlgev
应该是 Open Project
。请注意,每个字母都被字母表中的下一个字母替换!
这同样适用于Say 'Hello World'!
,它被“翻译”为Lc 'Jgrrq Yqtrf'!
。请注意,字母 y
被替换为 ,它位于 ASCII 表中
y
之后的两个位置。有趣的是,字符'
和!
保持不变..
每个字母占用的空间仍然是正确字母的空间,如下图所示,绿色背景上有正确的文本:
更新: 您的系统上是否可能缺少“Segoe UI”字体或存在缺陷?例如,您可以在 Word 中使用该字体吗?
更新:我发现用户面临同样问题的另外两个问题。在这两种情况下,问题似乎都与 Segoe UI 字体有关:
Scene Builder Editor displaying weird characters
JavaFX Scene builder shows wired characters
【讨论】:
你是对的!有什么解释? 我仍在寻找解释。但我很确定这不是 cp1252 和 utf-8 之间的编码问题,因为这些编码在同一位置有受影响的字母。我用另一个观察更新了我的答案。 Segoe UI 字体在我刚刚测试过的计算机上运行良好。 这很奇怪,在其他情况下 Segoe UI 是问题所在,请参阅我的更新答案。 非常感谢!它与 Segoe UI 字体有关!我删除了字体系列并安装了一个新的,它现在可以工作了【参考方案2】:我也遇到过这个问题,看了很多论坛后,我想我有一个可能的解释和解决方案。问题似乎与 Mac 用户和 Segoe UI 有关;
我猜是因为微软产品中使用了该字体,Mac无法渲染该字体,甚至下载的版本也无法使用。
到目前为止对我有用的最简单的解决方法是包含
style="-fx-font-family: serif"
在根节点中或添加到控制器中或添加
.root
-fx-font-family: serif
到您的 CSS。这适用于您系统中的任何字体。
【讨论】:
【参考方案3】:安装 Segoe UI 对我来说是一个巨大的红鲱鱼。相反,我将build.gradle
中定义的javafx
的版本更改为17.0.1,并将JavaFX 升级为16
【讨论】:
这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review以上是关于为啥 JavaFX 应用程序和场景生成器显示乱码?的主要内容,如果未能解决你的问题,请参考以下文章