我有一个带有以下代码的DatePicker:
datepicker.getEditor().addEventFilter(MouseEvent.MOUSE_CLICKED, event -> {
datepicker.show();
}
);
单击文本字段时,将显示弹出窗口。 Datepicker popup open
问题是,当显示弹出窗口时,我无法在文本字段中键入数字。 这是焦点问题吗? 谢谢你的帮助。
答案 0 :(得分:0)
据我了解,您可以从弹出窗口中选择日期,但无法手动在文本框中键入任何内容。这是editable
问题。
在FXML中,将editable="true"
添加到TextField标记中。或者查看"可编辑"场景生成器中的复选框我希望它对你有所帮助。
有一个很好的编码:)
答案 1 :(得分:0)
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Skin;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class ExampleDatePicker extends Application {
public static void main(final String[] args) {
launch(args);
}
private DatePicker datepicker;
@Override
public void start(final Stage primaryStage) {
final StackPane stackPane = new StackPane();
this.datepicker = new DatePicker() {
@Override
protected Skin<?> createDefaultSkin() {
final DatePickerSkin datePickerSkin = (DatePickerSkin) super.createDefaultSkin();
datePickerSkin.getPopupContent().setOnKeyTyped(new EventHandler<KeyEvent>() {
@Override
public void handle(final KeyEvent ke) {
ExampleDatePicker.this.setText(ke.getCharacter());
}
});
return datePickerSkin;
}
};
this.datepicker.addEventFilter(MouseEvent.MOUSE_CLICKED, event -> {
this.datepicker.show();
});
stackPane.getChildren().add(this.datepicker);
primaryStage.setScene(new Scene(stackPane, 400.0, 200.0));
primaryStage.show();
}
public void setText(final String string) {
this.datepicker.getEditor().setText(this.datepicker.getEditor().getText() + string);
}}