gpt4 book ai didi

JavaFx:显示日期选择器

转载 作者:行者123 更新时间:2023-12-01 20:18:02 25 4
gpt4 key购买 nike

我有一个ComboBox<MyItem>我想显示 DatePicker当我从ComboBox中选择一个特殊项目时。我创建了一个扩展 ComboBox 的类,并且该类中有一个 DatePicker。我已为其 selectedItemProperty 添加了一个监听器:

public class CustomComboBox extends ComboBox<MyItem>{

private DatePicker datePicker;

public CustomComboBox(){
getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
if (MyItem.DATE.equals(newValue)) {
initDatePicker();
datePicker.show();
datePicker.requestFocus();
}
});
}

private void initDatePicker() {
if (datePicker == null) {
datePicker = new DatePicker();
datePicker.setFocusTraversable(false);
}
}
}

所以如果我选择DATE DatePicker 项目应该弹出,如果我选择一个日期,我想添加作为 ComboBox 的值首先为什么 datePicker 不弹出?第二个问题是可以将选定的日期作为值添加到组合框中。

最佳答案

我假设你需要这样的东西: enter image description here

我通过使用 ControlsFX library 中的弹出类来做到这一点.

使用此演示应用程序来了解主要思想。

import org.controlsfx.control.PopOver;
// here all other needed dependencies

public class Main extends Application {
private static final String DATE_TYPE = "DATE";

private class ComboBoxNode {
private Object value;
private String type;

private ComboBoxNode(final Object value, final String type) {
this.value = value;
this.type = type;
}

@Override
public String toString() {
return Objects.toString(value);
}
}

public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage primaryStage) {
final ObservableList<ComboBoxNode> items =
FXCollections.observableArrayList(
new ComboBoxNode(LocalDate.now(), DATE_TYPE),
new ComboBoxNode("11:35AM", "TIME"));

final PopOver datePopOver = new PopOver();
datePopOver.setTitle("Enter new date");
datePopOver.setCornerRadius(10);
datePopOver.setHeaderAlwaysVisible(true);
datePopOver.setCloseButtonEnabled(true);
datePopOver.setAutoHide(true);

final ComboBox<ComboBoxNode> customComboBox = new ComboBox<>(items);
customComboBox.getSelectionModel().selectedItemProperty().addListener((o, old, newNode) -> {
if (newNode != null) {
if (newNode.type.equals(DATE_TYPE)) {
final DatePicker datePicker = new DatePicker((LocalDate) newNode.value);
datePicker.valueProperty().addListener((obs, oldDate, newDate) -> {
items.set(customComboBox.getSelectionModel().getSelectedInde‌​x(), new ComboBoxNode(newDate, DATE_TYPE));
datePopOver.hide();
});

final StackPane stackPane = new StackPane(datePicker);
stackPane.setPadding(new Insets(10, 10, 10, 10));

datePopOver.setContentNode(stackPane);
datePopOver.show(customComboBox);
} else {
datePopOver.hide();
}
}
});

final FlowPane pane = new FlowPane(customComboBox);
pane.setPadding(new Insets(10, 10, 10, 10));
pane.setPrefWidth(400);
pane.setPrefHeight(300);

// Show Scene
final Scene scene = new Scene(pane);
primaryStage.setTitle("Popup calendar");
primaryStage.setScene(scene);
primaryStage.show();
}
}

关于JavaFx:显示日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45417326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com