Reputation: 243
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
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