我正在使用此答案中建議的組合框: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上的用戶輸入操作。 –