Создание модифицированного календаря из DataPicker(popupContent)
Не могу найти на отдельной вкладке создать календарь из DataPicker, в котором будут отмечены некоторые числа, некоторых месяцев например: 01.01-21.01, 01.04-21.04 и т.д. каждого года отмечается жёлтым цветом(и возможно ли это). А так же как растянуть сам календарь почти на всю ширину AnchorPane, если установить размер DataPicker это не помогает(пример того что получается ниже). Заранее благодарю всех за внимание к этой теме и помощь!
необходимая часть MainScene.fxml:
1 2 3 4 5 6 7 8 9 10 11 12 13
text="Календарь плательщика"> > fx:id="tab3" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="0.0" minWidth="0.0" prefHeight="496.0" prefWidth="1240.0" stylesheets="@DarkStyle.css"> > fx:id="calendar" layoutX="286.0" layoutY="129.0" minHeight="200.0" minWidth="700.0" prefHeight="23.0" prefWidth="395.0" /> fitHeight="59.0" fitWidth="63.0" layoutX="1133.0" layoutY="420.0" pickOnBounds="true" preserveRatio="true"> > url="@icon.png" /> > > > > > >
PayerController:
1 2 3 4 5 6 7 8 9 10 11 12
public class PayerController { @FXML private DatePicker calendar; @FXML private AnchorPane tab3; public void initialize() { DatePickerSkin datePickerSkin = new DatePickerSkin(new DatePicker(LocalDate.now())); Node popupContent = datePickerSkin.getPopupContent(); tab3.getChildren().setAll(popupContent); } }
Чтобы написать календарь на 5 лет (все 5 лет выводить через цикл for) или один год вывести через цикл а остальное. как написать?

Слона нужно есть по кусочкам.
1. Напишите метод, который печатает месяц. Входные данные будут — количество дней и день недели, на который приходится первое число.
2. Напишите метод, который печатает год. Входные данные будут — день недели, на который приходится первое число и флаг високосного года. Пусть этот метод запускает метод из п.1 выдавая ему нужную информацию.
3. Напишите метод, который печатает календарь на несколько лет. Если вы реализуете п1 и п2, с п3, думаю, уже разберетесь.
JavaFX 8 DatePicker в приложении Swing
В этой статье показан пример приложения Java SE 8 Swing, использующего DatePicker управления JavaFX 8 DatePicker .
DatePicker управления DatePicker позволяет пользователю вводить дату в виде текста или выбирать дату во всплывающем календаре. В этом примере используется Swing JFrame с элементами управления FX. Для встраивания содержимого FX в приложение javafx.embed.swing пакет javafx.embed.swing предоставляет класс JFXPanel .
Приложение берет введенную дату из средства выбора даты и проверяет, находится ли оно в выбранном пользователем диапазоне дат (от и до даты) из двух средств выбора даты. Проверка даты выбора даты включает в себя:
- Дата от меньше даты
- Даты не из будущего
- Дата ввода находится в пределах от и до даты (включая)
Недопустимые или действительные сообщения отображаются в диалоговых окнах FX Alert .
На следующих двух FXPanel экрана показано приложение с JFrame и встроенными элементами управления FX ( FXPanel с DatePicker , DatePicker и Button ) и DatePicker календарем DatePicker соответственно.

FX контролирует в Swing JFrame

FX DatePicker с всплывающим календарем
1.1. Исходный код
Исходный код для этого примера FXDatePickerInSwingExample.java доступен для загрузки по ссылке, приведенной в конце этой статьи. Обратите внимание, что Java SE 8 требуется для компиляции и запуска кода. Java SE 8 включает в себя JavaFX 8.
2. Описание приложения
Приложение Java Swing FXDatePickerInSwingExample запускается из метода main() программы Java SE в потоке диспетчеризации событий следующим образом:
SwingUtilities.invokeLater(() -> < new FXDatePickerInSwingExample().initAndShowGUI();
Метод initAndShowGUI() отображает Swing JFrame со встроенными в него элементами управления JavaFX. Следующий фрагмент кода показывает конструкцию JFrame :
JFrame frame = new JFrame( «JavaFX DatePicker in Swing App» );
JFXPanel fxPanel = new JFXPanel();
frame.add(fxPanel);
frame.setVisible( true );
javafx.embed.swing.JFXPanel является компонентом для встраивания содержимого JavaFX в приложения Swing и обеспечивает совместимость JavaFX и Swing. JFXPanel расширяет JFXPanel javax.swing.JComponent . Отображаемый контент указывается с помощью JFXPanel setScene() который принимает экземпляр javafx.scene.Scene . Этот метод вызывается в потоке диспетчеризации событий приложения FX следующим образом:
Platform.runLater(() -> < fxPanel.setScene(createScene());
Метод createScene() возвращает экземпляр Scene с элементами управления FX. Скриншоты, показанные выше, имеют законченный графический интерфейс. В следующем фрагменте кода показан метод createScene() с фрагментами кода:
private Scene createScene() < GridPane grid = new GridPane(); Label title1 = new Label( "Enter and check if the input date is" ); Label title2 = new Label( "within the selected date range." ); VBox titleVb = new VBox(); titleVb.setAlignment(Pos.CENTER); titleVb.getChildren().addAll(title1, title2); // Input date picker Label inPickLabel = new Label( "Input date:" ); inPicker = new DatePicker(); inPicker.setPromptText(pattern); DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); StringConverter converter = new LocalDateStringConverter(formatter, null ); inPicker.setConverter(converter); grid.add(inPickLabel, 0 , 0 ); grid.add(inPicker, 1 , 0 ); // From and to date pickers Label pickLabel1 = new Label( "From date:" ); fmPicker = new DatePicker(LocalDate.now()); fmPicker.setEditable( false ); grid.add(pickLabel1, 0 , 1 ); grid.add(fmPicker, 1 , 1 ); // Vbox and scene VBox vbox = new VBox( 20 ); vbox.setPadding( new Insets( 15 , 15 , 15 , 15 )); vbox.getChildren().addAll(titleVb, grid, btnHb); return new Scene(vbox);
2.1. Элемент управления DatePicker
javafx.scene.control.DatePicker управления javafx.scene.control.DatePicker позволяет пользователю вводить дату в виде текста или выбирать дату во всплывающем календаре. Свойство DatePicker представляет LocalDate выбранный LocalDate . Это свойство может использоваться с конструктором, а также имеет методы getValue() и setValue() .
Следующий фрагмент кода создает объект выбора даты и устанавливает его значение на сегодняшнюю дату: DatePicker picker = new DatePicker(LocalDate.now());
2.2. Проверка даты
В этом приложении есть три сборщика даты. Все они настроены на сбор действительных дат:
- Значения даты не могут быть больше, чем сегодня.
- Дата начала никогда не может быть после даты.
Для выполнения этих ограничений используется dayCellFactoryProperty DatePicker . Можно настроить собственную фабрику ячеек для настройки отдельных ячеек дня во всплывающем окне выбора даты. У средства выбора даты есть метод для установки фабрики пользовательских ячеек: setDayCellFactory() .
Эти API используются для создания собственной фабрики ячеек: класс DateCell используется DateCell даты для визуализации отдельных ячеек сетки в календарном месяце. Приложение может переопределить метод update DateCell чтобы изменить свойства каждой ячейки, такие как текст, цвет фона и т. Д.
В следующем фрагменте кода показан метод, который возвращает пользовательский dayCellFactory . Обратите внимание, что этот единственный метод возвращает фабрику ячеек для трех сборщиков дат.
Как сделать календарь в javafx
Управление DatePicker позволяет пользователю вводить дату как текст или выбирать дату из раскрывающегося календаря. Календарь основан или на стандартной хронологии ISO 8601 или на любом из других классов хронологии, определенных в java.time.chrono пакете. value свойство представляет в настоящий момент выбранный <код>LocalDateкод> . Начальная дата может быть назначена через constructor или вызывая setValue() . Значение по умолчанию является нулем.
final DatePicker datePicker = new DatePicker(); datePicker.setOnAction(new EventHandler() < public void handle(Event t) < LocalDate date = datePicker.getValue(); System.err.println("Selected date: " + date); >>);
chronology свойство определяет календарную систему, которая будет использоваться для того, чтобы проанализировать, вывести на экран, и выбрать даты. value свойство всегда определяется в календарной системе ISO, однако, таким образом, приложения, основанные на различной хронологии, могут использовать методы преобразования, обеспеченные в <код>Хронологиякод> API, чтобы получить или установить соответствие <код>ChronoLocalDateкод> значение. Например:
LocalDate isoDate = datePicker.getValue(); ChronoLocalDate chronoDate = ((isoDate != null) ? datePicker.getChronology().date(isoDate) : null); System.err.println("Selected date: " + chronoDate);
Сводка свойства
Календарная система, используемая для того, чтобы проанализировать, вывести на экран, и выбрать даты в управлении DatePicker.
Преобразовывает входной текст в объект типа LocalDate и наоборот.
Пользовательская фабрика ячейки может быть обеспечена, чтобы настроить отдельные дневные ячейки в раскрывающемся DatePicker.
Редактор для DatePicker.
Должен ли раскрывающийся DatePicker вывести на экран столбец, показывающий недельные числа.
Свойства, наследованные от class javafx.scene.control. ComboBoxBase
Свойства, наследованные от class javafx.scene.control. Управление
Свойства, наследованные от class javafx.scene.layout. Область
Свойства, наследованные от class javafx.scene. Родитель
Свойства, наследованные от class javafx.scene. Узел
Полевая Сводка
Поля, наследованные от class javafx.scene.control. ComboBoxBase
Поля, наследованные от class javafx.scene.layout. Область
Сводка конструктора
Создает значение по умолчанию экземпляр DatePicker с a null набор значений даты.
Создает экземпляр DatePicker и устанавливает value к данной дате.
Сводка метода
Календарная система, используемая для того, чтобы проанализировать, вывести на экран, и выбрать даты в управлении DatePicker.
Преобразовывает входной текст в объект типа LocalDate и наоборот.
Создайте новый экземпляр кожи значения по умолчанию для этого управления.
Пользовательская фабрика ячейки может быть обеспечена, чтобы настроить отдельные дневные ячейки в раскрывающемся DatePicker.
Редактор для DatePicker.
Получает значение хронологии свойства.
Получает значение преобразователя свойства.
Получает значение свойства dayCellFactory.
Получает значение редактора свойств.
Получает значение свойства showWeekNumbers.
Устанавливает значение хронологии свойства.
Устанавливает значение преобразователя свойства.
Устанавливает значение свойства dayCellFactory.
Устанавливает значение свойства showWeekNumbers.
Должен ли раскрывающийся DatePicker вывести на экран столбец, показывающий недельные числа.
Методы, наследованные от class javafx.scene.control. ComboBoxBase
Методы, наследованные от class javafx.scene.control. Управление
Методы, наследованные от class javafx.scene.layout. Область
Методы, наследованные от class javafx.scene. Родитель
Методы, наследованные от class javafx.scene. Узел
Методы, наследованные от class java.lang. Объект
Деталь свойства
dayCellFactory
public final ObjectPropertyCallbackDatePicker,DateCell>> dayCellFactoryProperty
Пользовательская фабрика ячейки может быть обеспечена, чтобы настроить отдельные дневные ячейки в раскрывающемся DatePicker. Обратитесь к DateCell и Cell для получения дополнительной информации о фабриках ячейки. Пример:
final Callback dayCellFactory = new Callback() < public DateCell call(final DatePicker datePicker) < return new DateCell() < @Override public void updateItem(LocalDate item, boolean empty) < super.updateItem(item, empty); if (MonthDay.from(item).equals(MonthDay.of(9, 25))) < setTooltip(new Tooltip("Happy Birthday!")); setStyle("-fx-background-color: #ff4444;"); >if (item.equals(LocalDate.now().plusDays(1))) < // Tomorrow is too soon. setDisable(true); >> >; > >; datePicker.setDayCellFactory(dayCellFactory);
хронология
public final ObjectProperty chronologyProperty
Календарная система, используемая для того, чтобы проанализировать, вывести на экран, и выбрать даты в управлении DatePicker. Значение по умолчанию возвращается из звонка Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT)) . Значение по умолчанию, обычно <кодируют>IsoChronologyкод> если не обеспечено явно в <код>Локалькод> при помощи календарного расширения Локали. Установка значения к null восстановит хронологию значения по умолчанию.кодируют>
showWeekNumbers
public final BooleanProperty showWeekNumbersProperty
Должен ли раскрывающийся DatePicker вывести на экран столбец, показывающий недельные числа. Значение по умолчанию является ложью если иначе не определено в пакете ресурса для текущей локали. Это свойство может быть переключено конечным пользователем при использовании контекстного меню в раскрывающемся DatePicker, таким образом, рекомендуется, чтобы приложения сохранили и восстановили значение между сеансами.
преобразователь
public final ObjectPropertyStringConverter> converterProperty
Преобразовывает входной текст в объект типа LocalDate и наоборот. Если не установленный приложением, кожа DatePicker class установит преобразователь, основанный на a java.time.DateTimeFormatter для тока <код>Локалькод> и chronology . Это средство форматирования тогда используется, чтобы проанализировать и вывести на экран текущее значение даты. Установка значения к null восстановит преобразователь значения по умолчанию. Пример используя явное средство форматирования:
datePicker.setConverter(new StringConverter() < String pattern = "yyyy-MM-dd"; DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern); < datePicker.setPromptText(pattern.toLowerCase()); >@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; >> >);
Пример, который обертывает средство форматирования значения по умолчанию и ловит исключения синтаксического анализа:
final StringConverter defaultConverter = datePicker.getConverter(); datePicker.setConverter(new StringConverter() < @Override public String toString(LocalDate value) < return defaultConverter.toString(value); >@Override public LocalDate fromString(String text) < try < return defaultConverter.fromString(text); >catch (DateTimeParseException ex) < System.err.println("HelloDatePicker: "+ex.getMessage()); throw ex; >> >);
редактор
public final ReadOnlyObjectPropertyTextField> editorProperty