从 Combobox 分配 JavaFX 标签字体不起作用
Assigning JavaFX Label Font from Combobox not working
我试图通过从我构造的组合框中选择值来分配标签的字体 (node
)。组合框只有几个选项,因此所有选项都应该可以安全地在此应用中使用。
一切正常,组合框中所有正确的字符串值都被提取并分配给标签。但是标签中的字体没有改变,当我从标签中输出字体时,活动字体仍然是系统默认的。我有另一种方法,它只编辑 fontSize
,而且效果很好。所以它一定是实际的字符串值无效。但是没有抛出错误,组合框列表名称是从系统上安装的字体中获取的。
用例和代码如下。我错过了什么?
1) Select 字体和单击确定 已更改)
2) 分配给标签 (代码片段)
String font = String.valueOf(combobox_font.getValue());
label.setFont(Font.font(font));
注意:为了我的程序,我试图分别分配字体类型和大小,但我也尝试过用字体大小分配值,但没有成功。
label.setFont(Font.font(font, fontSize)); ///fontSize is a double value gotten from teh textfled above
3) 输出标签字体(仍为系统默认)
Font[name=System Regular, family=System, style=Regular, size=12.0]
如果您要指定字体名称而不是家族名称,则需要使用 Font
的构造函数,因为所有静态方法都需要字体家族:
@Override
public void start(Stage primaryStage) {
ComboBox<String> fontChoice = new ComboBox<>(FXCollections.observableList(Font.getFontNames()));
Spinner<Integer> spinner = new Spinner<>(1, 40, 12);
Text text = new Text("Hello World!");
text.fontProperty().bind(Bindings.createObjectBinding(() -> new Font(fontChoice.getValue(), spinner.getValue()), spinner.valueProperty(), fontChoice.valueProperty()));
HBox hBox = new HBox(fontChoice, spinner);
StackPane.setAlignment(hBox, Pos.TOP_CENTER);
StackPane root = new StackPane(hBox, text);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
要使用静态方法,请使用系列名称:
@Override
public void start(Stage primaryStage) {
ComboBox<String> familyChoice = new ComboBox<>(FXCollections.observableList(Font.getFamilies()));
Spinner<Integer> spinner = new Spinner<>(1, 40, 12);
Text text = new Text("Hello World!");
text.fontProperty().bind(Bindings.createObjectBinding(() -> Font.font(familyChoice.getValue(), spinner.getValue()), spinner.valueProperty(), familyChoice.valueProperty()));
HBox hBox = new HBox(familyChoice, spinner);
StackPane.setAlignment(hBox, Pos.TOP_CENTER);
StackPane root = new StackPane(hBox, text);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
我试图通过从我构造的组合框中选择值来分配标签的字体 (node
)。组合框只有几个选项,因此所有选项都应该可以安全地在此应用中使用。
一切正常,组合框中所有正确的字符串值都被提取并分配给标签。但是标签中的字体没有改变,当我从标签中输出字体时,活动字体仍然是系统默认的。我有另一种方法,它只编辑 fontSize
,而且效果很好。所以它一定是实际的字符串值无效。但是没有抛出错误,组合框列表名称是从系统上安装的字体中获取的。
用例和代码如下。我错过了什么?
1) Select 字体和单击确定 已更改)
2) 分配给标签 (代码片段)
String font = String.valueOf(combobox_font.getValue());
label.setFont(Font.font(font));
注意:为了我的程序,我试图分别分配字体类型和大小,但我也尝试过用字体大小分配值,但没有成功。
label.setFont(Font.font(font, fontSize)); ///fontSize is a double value gotten from teh textfled above
3) 输出标签字体(仍为系统默认)
Font[name=System Regular, family=System, style=Regular, size=12.0]
如果您要指定字体名称而不是家族名称,则需要使用 Font
的构造函数,因为所有静态方法都需要字体家族:
@Override
public void start(Stage primaryStage) {
ComboBox<String> fontChoice = new ComboBox<>(FXCollections.observableList(Font.getFontNames()));
Spinner<Integer> spinner = new Spinner<>(1, 40, 12);
Text text = new Text("Hello World!");
text.fontProperty().bind(Bindings.createObjectBinding(() -> new Font(fontChoice.getValue(), spinner.getValue()), spinner.valueProperty(), fontChoice.valueProperty()));
HBox hBox = new HBox(fontChoice, spinner);
StackPane.setAlignment(hBox, Pos.TOP_CENTER);
StackPane root = new StackPane(hBox, text);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
要使用静态方法,请使用系列名称:
@Override
public void start(Stage primaryStage) {
ComboBox<String> familyChoice = new ComboBox<>(FXCollections.observableList(Font.getFamilies()));
Spinner<Integer> spinner = new Spinner<>(1, 40, 12);
Text text = new Text("Hello World!");
text.fontProperty().bind(Bindings.createObjectBinding(() -> Font.font(familyChoice.getValue(), spinner.getValue()), spinner.valueProperty(), familyChoice.valueProperty()));
HBox hBox = new HBox(familyChoice, spinner);
StackPane.setAlignment(hBox, Pos.TOP_CENTER);
StackPane root = new StackPane(hBox, text);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}