【发布时间】:2019-05-26 04:08:25
【问题描述】:
我正在使用 JavaFX 和 Scene Builder 制作应用程序。
-我有一个用于选择字体大小(id - size)的组合框
-我有一个用于选择字体系列的组合框(id - 字体选择器)
-我有一个标签(id - 前标签)
问题 #1: 当我单击带有 fThe 下拉菜单的 Combobox 时。下拉列表仅在一秒钟后出现。好像有效 慢
问题 #2: 当我单击带有字体系列的组合框并选择一些字体时,它不适用于标签,但字体系列适用于 我单击组合框并第二次选择字体。在这种情况下,我 应该连续两次选择字体以将字体应用于我的标签
问题 #3(主要问题): 我有组合框冲突。当我选择字体系列时,它适用于标签,但是当我选择字体时 其他组合框大小的大小也适用,但在该字体系列之后 标签的默认值。当我选择字体时也会出现同样的情况 大小,然后从其他组合框中选择字体系列。
似乎只能将一个组合框应用于标签。
如何解决这些问题?
*所有代码都在控制器中
*问题 #3 是最根本的问题。
@FXML private ComboBox<String> fontSelector;
@FXML private ComboBox<Integer> size;
@FXML private Label fontLabel;
//create array of font sizes
ObservableList<Integer> fontSizes = FXCollections.observableArrayList(8,
10, 11, 12, 14, 16, 18, 20, 24, 30, 36, 40, 48, 60, 72);
//get fonts from system
ObservableList<String> fonts =
FXCollections.observableArrayList(Font.getFamilies());
//getting Controller variables and methods through Context class
Controller cont = Context.getInstance().getController();
@Override
public void initialize(URL location, ResourceBundle resources) {
//register FontController in Context Class
Context.getInstance().setFontController(this);
//bind text from textfield to label
fontLabel.textProperty().bind(fontTextfield.textProperty());
//show fonts' actual look in combobox list
fontSelector.setCellFactory((ListView<String> listView) -> {
final ListCell<String> cell = new ListCell<>(){
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item);
setFont(new Font(item, 14));
}
}
};
return cell;
});
fontSelector.setItems(fonts);
size.setItems(fontSizes);
size.setOnAction(e -> updateFontSize());
}
从组合框将字体大小应用于标签的方法
private void updateFontSize() {
fontLabel.setFont(Font.font(size.getValue()));
}
将字体系列从组合框应用到标签的方法
public void changeLabel(ActionEvent event) {
fontSelector.getSelectionModel().selectedItemProperty().addListener((obs,
oldValue, newValue) -> fontLabel.setFont(Font.font(newValue,
FontWeight.NORMAL, 35)));
}
编辑:
我假设组合框的冲突出现在这里:
fontSelector.getSelectionModel().selectedItemProperty().addListener((obs,
oldValue, newValue) -> fontLabel.setFont(Font.font(newValue,
FontWeight.NORMAL, 35)));
如何重构那行代码以使其工作,但在方括号中的 FontWeight.Normal 之后没有具体的字体大小?
【问题讨论】:
标签: java javafx scenebuilder