我正在使用此答案中建议的组合框:JavaFx: show DatePicker,但显示正确的文本时出现问题。如果我从DatePicker中选择一个日期,我试图设置编辑器的文本,但它什么都没发生。 这是我曾尝试:JavaFx:组合框编辑器的文本
getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) ->{
if (newValue != null) {
if (MyTupe.DATE.equals(newValue.getType())) {
initDatePicker();
datePicker.valueProperty().addListener((obs, oldDate, newDate) -> {
newValue.setValue(newDate);
getEditor().setText(newDate.toString());
datePopOver.hide();
});
StackPane stackPane = new StackPane(datePicker);
stackPane.setPadding(new Insets(10, 10, 10, 10));
datePopOver.setContentNode(stackPane);
datePopOver.show(this);
} else {
datePopOver.hide();
}
}
});
尝试了很多之后,我添加了两个事件编辑器的textProperty和setOnMouseClicked这样的:如果我不用手动设置
getEditor().textProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("Text changed");
});
setOnMouseClicked(event -> {
System.out.println(getEditor().getText());
});
首先不会被触发getEditor().setText();
即使我改变了comboBox的值,这对我来说有点奇怪,因为我认为这个textField包含了comboBox的文本(也许我错了)。如果删除该行,则每次显示空字符串时都会显示mouseClick事件。 如果getEditor().setText();
行存在,编辑器的getText()将返回正确的文本,但不会显示在组合框中。
的问题:
- 在哪里存储组合框的文本?
- 如何更改selectedItemProperty侦听器中的文本?
我认为,也许我在某处犯了一个错误,所以这是为什么这不起作用,但我不知道什么,你能帮助我吗?
- ComboBoxes可以有一个StringConverter,将它的值转换为显示的文本。 - 使用onAction替代onMouseClicked来触发ComboBox和DatePicker上的用户输入操作。 –