【发布时间】:2018-01-08 04:06:06
【问题描述】:
我正在使用此答案中建议的组合框:JavaFx: show DatePicker,但我在显示正确文本时遇到问题。如果我从 DatePicker 中选择一个日期,我会尝试设置编辑器的文本,但它什么也没发生。 这是我尝试过的:
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的值,First也不会触发,这对我来说有点奇怪,因为我认为这个textField保存了comboBox的文本。(也许我错了吗??)。如果删除该行,则每次显示一个空字符串时,mouseClick 事件都会显示。
如果getEditor().setText(); 行存在,则编辑器的 getText() 会返回正确的文本,但不会显示在组合框中。
问题:
- comboBox 的文本存储在哪里?
- 如何更改 selectedItemProperty 侦听器中的文本?
我认为也许我在某个地方做错了,所以这就是为什么这不起作用,但我不知道是什么,你能帮我吗?
【问题讨论】:
-
- ComboBoxes 可以有一个 StringConverter 将它的值转换为显示的文本。 - 使用 onAction 而不是 onMouseClicked 来触发 ComboBox 和 DatePicker 上用户输入的操作。
标签: java javafx combobox javafx-8