【发布时间】:2016-11-02 19:46:06
【问题描述】:
我正在创建一个简短的 javafx 程序,其中包含一个带有一些文本的标签和一个按钮,该按钮应该将标签的字体更改为斜体。由于我使用的字体是自定义字体,因此无法直接调用new Font("human.ttf", FontPosture.ITALIC, 20),因为 javafx 无法将自定义字体转换为斜体或粗体。
所以我决定使用两个具有相同字体系列的不同字体文件,一个具有常规样式,另一个具有斜体样式。因此,当点击斜体按钮时,程序会加载斜体字体文件并将标签的字体设置为斜体字体。
但是当我尝试该程序时,单击斜体按钮后标签的字体不受影响。我努力寻找问题的根源并添加了几个打印语句。在这个过程中我发现问题是按钮的eventHandler中的setFont方法没有正常工作。由于打印语句,我还发现字体文件路径是正确的。因此,我无法找出我在代码中的错误。
这是 FontChanger 类:
public class FontChanger extends Application{
private Label label;
private Font font;
public void start(Stage primaryStage){
AnchorPane root = new AnchorPane();
root.setPrefHeight(30);
root.setPrefWidth(30);
addLabel(root);
addItalicButton(root);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.show();
}
public void addLabel(AnchorPane root){
label = new Label("Sample text");
font = Font.loadFont(FontChanger.this.getClass().getResource("human.ttf").toExternalForm (), 20);
label.setFont(font);
label.setLayoutX(10);
label.setLayoutY(10);
root.getChildren().add(label);
}
public void addItalicButton(AnchorPane root){
Button italicButton = new Button("italic");
italicButton.setLayoutX(10);
italicButton.setLayoutY(35);
italicButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
font = Font.loadFont(FontChanger.this.getClass().getResource("human_italic.ttf").toExternalForm(), 20);
System.out.println(FontChanger.this.getClass().getResource("human_italic.ttf").to ExternalForm());
label.setFont(font);
}
});
root.getChildren().add(italicButton);
}
public static void main(String[] args){
launch(args);
}
}
如果需要任何澄清,请告诉我。提前致谢。
【问题讨论】: