package net.time4j.ui.javafx;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.DatePicker;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.util.Duration;
import net.time4j.PlainDate;
import net.time4j.calendar.HijriCalendar;
import net.time4j.format.expert.ChronoFormatter;
import net.time4j.format.expert.PatternType;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.time.chrono.HijrahChronology;
import java.util.Locale;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(JUnit4.class)
public class CalendarPickerTest
extends Application {
@Test
public void open() {
Application.launch();
}
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("CalendarPicker-Test");
CalendarPicker<PlainDate> picker = CalendarPicker.gregorianWithSystemDefaults();
picker.setCellCustomizer(
(cell, column, row, model, date) -> {
if (CellCustomizer.isWeekend(column, model)) {
cell.setStyle("-fx-background-color: #FFE0E0;");
cell.setDisable(true);
}
}
);
picker.setPromptText("TT.MM.JJJJ");
assertThat(picker.promptTextProperty().get(), is("TT.MM.JJJJ"));
ChronoFormatter<PlainDate> dateFormat =
ChronoFormatter.ofDatePattern("dd.MM.yyyy", PatternType.CLDR, Locale.GERMAN);
picker.setDateFormat(dateFormat);
assertThat(picker.dateFormatProperty().get(), is(dateFormat));
picker.setMinDate(PlainDate.of(-12, 1));
picker.setMaxDate(PlainDate.of(9999, 365));
assertThat(picker.minDateProperty().get(), is(PlainDate.of(-12, 1)));
assertThat(picker.maxDateProperty().get(), is(PlainDate.of(9999, 365)));
picker.setValue(PlainDate.of(9999, 1, 20));
picker.setLocale(new Locale("de"));
Button button = new Button();
button.setText("Show selected value");
button.setOnAction(
event -> {
String error = picker.errorProperty().getValue();
System.out.println(
error == null
? picker.valueProperty().get()
: error);
picker.setShowInfoLabel(!picker.showInfoLabelProperty().get());
}
);
DatePicker datePicker = new DatePicker();
datePicker.chronologyProperty().setValue(HijrahChronology.INSTANCE);
GridPane gridPane = new GridPane();
gridPane.setHgap(5);
gridPane.setVgap(5);
gridPane.add(picker, 0, 0);
gridPane.add(button, 0, 1);
gridPane.add(datePicker, 0, 2);
CalendarPicker<?> alternativeCalendarPicker;
alternativeCalendarPicker = CalendarPicker.persianWithSystemDefaults();
alternativeCalendarPicker.setLengthOfAnimations(Duration.seconds(0.7));
assertThat(
alternativeCalendarPicker.lengthOfAnimationsProperty().get(),
is(Duration.seconds(0.7)));
alternativeCalendarPicker = CalendarPicker.minguoWithSystemDefaults();
alternativeCalendarPicker = CalendarPicker.thaiWithSystemDefaults();
alternativeCalendarPicker = CalendarPicker.hijriWithSystemDefaults(() -> HijriCalendar.VARIANT_UMALQURA);
alternativeCalendarPicker.setShowInfoLabel(true);
alternativeCalendarPicker.setCellCustomizer(
(cell, column, row, model, date) -> {
if (CellCustomizer.isWeekend(column, model)) {
cell.setStyle("-fx-background-color: #FFE0E0;");
cell.setDisable(true);
}
}
);
alternativeCalendarPicker.setLocale(new Locale("ar"));
alternativeCalendarPicker.setShowWeeks(true);
gridPane.add(alternativeCalendarPicker, 0, 3);
gridPane.setAlignment(Pos.CENTER);
Scene scene = new Scene(gridPane, 300, 200);
stage.setScene(scene);
stage.show();
}
}