Datepicker textfield edit uneditable

时间:2017-06-08 13:01:06

标签: javafx datepicker

我有一个带有以下代码的DatePicker:

    datepicker.getEditor().addEventFilter(MouseEvent.MOUSE_CLICKED, event -> {
        datepicker.show();
    }
    );

单击文本字段时,将显示弹出窗口。 Datepicker popup open

问题是,当显示弹出窗口时,我无法在文本字段中键入数字。 这是焦点问题吗? 谢谢你的帮助。

2 个答案:

答案 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);
}}