Mark A.
Mark A.

Reputation: 243

JavaFX Activate Datepicker dropdown

How do I activate the the dropdown calendar of a datepicker when it is focused?

Letter.FXML

<DatePicker fx:id="letterDatePicker" editable="false" focusTraversable="false" layoutX="184.0" layoutY="174.0" prefHeight="25.0" prefWidth="178.0" promptText="Select date">

FXMLControllerLetter.java

@FXML
private void companyName(ActionEvent event)
{
    if(fxTxtCompanyName.getText().isEmpty())
    {
        Stage letterStage = (Stage) ((Node) event.getSource()).getScene().getWindow();

        Alert alert = new Alert(AlertType.ERROR);
        alert.setTitle("Insufficient Data");
        alert.initOwner(letterStage);

        alert.setHeaderText("Lacking company name");
        alert.setContentText("Looks like you forgot to input the company name!");

        alert.showAndWait();
    }
    else
    {
        fxTxtCompanyName.setText(fxTxtCompanyName.getText().toUpperCase());
        letterDatePicker.requestFocus();
        letterDatePicker.show();
    }

}

Date Format Converter - I wanted the format of the datepicker to be "MMMM dd, yyyy" so I set the StringConverter to get my desired output format.

@Override
public void initialize(URL url, ResourceBundle rb) 
{
    // TODO
    fxLblCurrentDate.setText(dateNow());

    // <editor-fold defaultstate="collapsed" desc="DATE FORMAT CONVERTER">
    String pattern = "MMMM dd, yyyy";
    letterDatePicker.setConverter(new StringConverter<LocalDate>() 
    {
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern);

        @Override
        public String toString(LocalDate date) 
        {
            if (date != null)
            {
                return dateFormatter.format(date);
            }
            else
            {
                return "";
            }
        }

        @Override
        public LocalDate fromString(String string) 
        {
            if (string != null && !string.isEmpty()) 
            {
                return LocalDate.parse(string, dateFormatter);
            }
            else
            {
                return null;
            }
        }
    });
    // </editor-fold>
}

Upvotes: 1

Views: 2166

Answers (1)

Uluk Biy
Uluk Biy

Reputation: 49195

Invoke show() method of it. See implicit full example below:

@Override
public void start( Stage stage )
{

    final DatePicker datePicker = new DatePicker();
    datePicker.setEditable( false );
    datePicker.setFocusTraversable( false );
    datePicker.setPromptText( "Select date" );
    datePicker.setPrefWidth( 170 );

    Button b = new Button( "choose date" );
    b.setOnAction( new EventHandler<ActionEvent>()
    {
        @Override
        public void handle( ActionEvent event )
        {
            datePicker.show();
            datePicker.requestFocus();
        }
    } );

    Scene scene = new Scene( VBoxBuilder.create().children( datePicker, b ).build(), 800, 600 );
    stage.setScene( scene );
    stage.show();
}

Upvotes: 2

Related Questions