Чтобы написать календарь на 5 лет (все 5 лет выводить через цикл for) или один год вывести через цикл а остальное. как написать?

Слона нужно есть по кусочкам.
1. Напишите метод, который печатает месяц. Входные данные будут — количество дней и день недели, на который приходится первое число.
2. Напишите метод, который печатает год. Входные данные будут — день недели, на который приходится первое число и флаг високосного года. Пусть этот метод запускает метод из п.1 выдавая ему нужную информацию.
3. Напишите метод, который печатает календарь на несколько лет. Если вы реализуете п1 и п2, с п3, думаю, уже разберетесь.
Ввод и обработка даты в JavaFX и Scene builder
Пытаюсь разобраться в JavaFX и Scene Builder. Смысл программы таков: вводишь дату и при нажатии на кнопку рассчитывается время, прошедшее с введенной даты. Долго мучаюсь, никак не получается реализовать. Подскажите, пожалуйста, в чем ошибка(расписать поподробней, если можно:) ) и как сделать так, чтобы заработало. FXML файл:
Файл Контроллер:
public class MyController implements Initializable < @FXML private TextField myTextField; @FXML private TextField enterDate; @FXML private LocalDateTime localDateTime; @Override public void initialize(URL url, ResourceBundle resourceBundle) < >public void showDuration(ActionEvent event) < DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMMM-yyyy HH:mm"); localDateTime = LocalDateTime.parse(enterDate.getText(), formatter); LocalDateTime dateTime = LocalDateTime.now(); Duration duration = Duration.between(localDateTime, dateTime); String result = String.format("%dд %dч %dм", duration.toDays(), duration.toHours() % 24, duration.toMinutes() % 60); myTextField.setText(result); >>
Выдает ошибку:
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1856) at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1723) at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) at javafx.base/javafx.event.Event.fireEvent(Event.java:198) at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8792) at javafx.controls/javafx.scene.control.Button.fire(Button.java:203) at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:208) at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274) at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247) at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.base/javafx.event.Event.fireEvent(Event.java:198) at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3861) at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1854) at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2587) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:413) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446) at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556) at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942) at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:77) at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:275) at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83) at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1851) . 46 more Caused by: java.time.format.DateTimeParseException: Text '06.12.2021 23:43' could not be parsed at index 2 at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2052) at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1954) at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:494) at com.example.nosmoking/org.o7planning.javafx.MyController.showDuration(MyController.java:42) . 57 more Process finished with exit code 0
Как сделать календарь в 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
Редактор для DatePicker.
Деталь конструктора
DatePicker
Создает значение по умолчанию экземпляр DatePicker с a null набор значений даты.
DatePicker
public DatePicker(java.time.LocalDate localDate)
Создает экземпляр DatePicker и устанавливает value к данной дате.
Деталь метода
setDayCellFactory
public final void setDayCellFactory(CallbackDatePicker,DateCell> value)
Устанавливает значение свойства dayCellFactory.
Описание свойства: Пользовательская фабрика ячейки может быть обеспечена, чтобы настроить отдельные дневные ячейки в раскрывающемся 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);
getDayCellFactory
public final CallbackDatePicker,DateCell> getDayCellFactory()
Получает значение свойства dayCellFactory.
Описание свойства: Пользовательская фабрика ячейки может быть обеспечена, чтобы настроить отдельные дневные ячейки в раскрывающемся 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);
dayCellFactoryProperty
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);
chronologyProperty
public final ObjectProperty chronologyProperty()
Календарная система, используемая для того, чтобы проанализировать, вывести на экран, и выбрать даты в управлении DatePicker. Значение по умолчанию возвращается из звонка Chronology.ofLocale(Locale.getDefault(Locale.Category.FORMAT)) . Значение по умолчанию, обычно <кодируют>IsoChronologyкод> если не обеспечено явно в <код>Локалькод> при помощи календарного расширения Локали. Установка значения к null восстановит хронологию значения по умолчанию.кодируют>
getChronology
Получает значение хронологии свойства.
setChronology
public final void setChronology(java.time.chrono.Chronology value)
Устанавливает значение хронологии свойства.
showWeekNumbersProperty
public final BooleanProperty showWeekNumbersProperty()
Должен ли раскрывающийся DatePicker вывести на экран столбец, показывающий недельные числа. Значение по умолчанию является ложью если иначе не определено в пакете ресурса для текущей локали. Это свойство может быть переключено конечным пользователем при использовании контекстного меню в раскрывающемся DatePicker, таким образом, рекомендуется, чтобы приложения сохранили и восстановили значение между сеансами.
setShowWeekNumbers
public final void setShowWeekNumbers(boolean value)
Устанавливает значение свойства showWeekNumbers.
isShowWeekNumbers
Получает значение свойства showWeekNumbers.
converterProperty
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; >> >);
setConverter
public final void setConverter(StringConverter value)
Устанавливает значение преобразователя свойства.
Описание свойства: Преобразовывает входной текст в объект типа 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; >> >);
getConverter
public final StringConverter getConverter()
Получает значение преобразователя свойства.
Описание свойства: Преобразовывает входной текст в объект типа 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; >> >);
getEditor
public final TextField getEditor()
Получает значение редактора свойств.
editorProperty
public final ReadOnlyObjectPropertyTextField> editorProperty()
Редактор для DatePicker.
createDefaultSkin
protected Skin createDefaultSkin()
Создайте новый экземпляр кожи значения по умолчанию для этого управления. Это вызывают, чтобы создать кожу для управления, если никакая кожа не обеспечивается через CSS -fx-skin или набор явно в sub-class с setSkin(. ) .
getClassCssMetaData
public static java.util.ListCssMetaDataStyleable,?>> getClassCssMetaData()
getControlCssMetaData
public java.util.ListCssMetaDataStyleable,?>> getControlCssMetaData()
Календарь JavaFX Script Calendar, отображающий канал Календаря Google
Сегодня я хотел бы показать вам скромное начало календаря JavaFX Script, который отображает канал Календаря Google. В настоящее время он указывает на мой Календарь Google, который я редко заполнял некоторыми примерами данных. Вы можете изменить программу, чтобы она указывала на ваш Календарь Google, если вы выберете.
Со временем я улучшу эту программу Календаря, но хотел продемонстрировать способность JavaFX Script легко анализировать поток XML через Интернет. Возможно, вы также захотите взглянуть на статью «Скомпилированный JavaFX Script Now Speaks JSON», которая демонстрирует анализ потоков JSON через Интернет. Вот скриншот сегодняшнего примера, за которым следует код программы:
Код позади пользовательского интерфейса
Очевидно, что в этот календарь можно внести множество улучшений, но вот четыре исходных файла, которые составляют этот пример в его текущем состоянии:
CalendarJFX.fx
/*
* CalendarJFX.fx -
* The main program for a compiled JavaFX calendar program
*
* Developed 2008 by James L. Weaver (jim.weaver at lat-inc.com)
* to serve as a compiled JavaFX Script example.
*/
import javafx.ui.*;
import javafx.ui.canvas.*;
import java.lang.System;
Frame var calModel =
CalendarModel <>
title: "CalendarJFX"
width: 600
height: 600
visible: true
content:
BorderPanel top:
BorderPanel left:
FlowPanel content: [
Button text: " action:
function():Void calModel.prevYear();
>
>,
Button text: " action:
function():Void calModel.prevMonth();
>
>
]
>
center:
FlowPanel content:
SimpleLabel text: bind " "
font:
Font size: 24
style: FontStyle.BOLD
>
>
>
right:
FlowPanel content: [
Button text: ">"
action:
function():Void calModel.nextMonth();
>
>,
Button text: ">>"
action:
function():Void calModel.nextYear();
>
>
]
>
bottom:
GridPanel // TODO: Internationalize days of the week
var days = ["Sun", "Mon", "Tue",
"Wed", "Thu", "Fri", "Sat"]
rows: 1
columns: 7
cells:
for (day in days) SimpleLabel text: day
font:
Font size: 18
style: FontStyle.BOLD
>
horizontalAlignment:
HorizontalAlignment.CENTER
>
>
>
>
center:
GridPanel vgap: 1
hgap: 1
rows: 6
columns: 7
cells:
for (idx in [1..42]) CalendarCell calModel: calModel
dayOfMonthStr: bind calModel.getDayInMonthStrForCell(idx as Integer);
cellGregCal: bind calModel.getDateForCell(idx as Integer);
>
>
>
>
onClose:
function():Void System.exit(0);
>
>
CalendarCell.fx
/*
* CalendarJFX.fx -
* The main program for a compiled JavaFX calendar program
*
* Developed 2008 by James L. Weaver (jim.weaver at lat-inc.com)
* to serve as a compiled JavaFX Script example.
*/
import javafx.ui.*;
import javafx.ui.canvas.*;
import java.lang.System;
Frame var calModel =
CalendarModel <>
title: "CalendarJFX"
width: 600
height: 600
visible: true
content:
BorderPanel top:
BorderPanel left:
FlowPanel content: [
Button text: " action:
function():Void calModel.prevYear();
>
>,
Button text: " action:
function():Void calModel.prevMonth();
>
>
]
>
center:
FlowPanel content:
SimpleLabel text: bind " "
font:
Font size: 24
style: FontStyle.BOLD
>
>
>
right:
FlowPanel content: [
Button text: ">"
action:
function():Void calModel.nextMonth();
>
>,
Button text: ">>"
action:
function():Void calModel.nextYear();
>
>
]
>
bottom:
GridPanel // TODO: Internationalize days of the week
var days = ["Sun", "Mon", "Tue",
"Wed", "Thu", "Fri", "Sat"]
rows: 1
columns: 7
cells:
for (day in days) SimpleLabel text: day
font:
Font size: 18
style: FontStyle.BOLD
>
horizontalAlignment:
HorizontalAlignment.CENTER
>
>
>
>
center:
GridPanel vgap: 1
hgap: 1
rows: 6
columns: 7
cells:
for (idx in [1..42]) CalendarCell calModel: calModel
dayOfMonthStr: bind calModel.getDayInMonthStrForCell(idx as Integer);
cellGregCal: bind calModel.getDateForCell(idx as Integer);
>
>
>
>
onClose:
function():Void System.exit(0);
>
>
CalendarModel.fx
/*
* CalendarModel.fx -
* The model behind a compiled JavaFX calendar program
*
* Developed 2008 by James L. Weaver (jim.weaver at lat-inc.com)
* to serve as a compiled JavaFX Script example.
*/
import javafx.xml.*;
import java.text.SimpleDateFormat;
import java.lang.System;
import java.util.Calendar;
import java.util.GregorianCalendar;
class CalendarModel attribute calendarFeedURI =
"http://www.google.com/calendar/feeds/james.l.weaver%40gmail.com/public/full";
attribute docBuilder =
DocumentBuilder namespaceAware:true
validating:true
ignoringComments:false
>;
attribute document =
docBuilder.parseURI(calendarFeedURI);
attribute calEntries:CalendarEntry[];
attribute selectedGregCal:GregorianCalendar = new GregorianCalendar();
attribute utilGregCal:GregorianCalendar = new GregorianCalendar();
attribute selectedMonth:Integer;
attribute selectedYear:Integer;
attribute dayInMonthFmt = new SimpleDateFormat("d");
attribute monthFmt = new SimpleDateFormat("MMMM");
attribute yearFmt = new SimpleDateFormat("yyyy");
attribute cellNumber:Integer;
attribute selectedDayInMonthStr:String;
attribute selectedMonthStr:String;
attribute selectedYearStr:String;
postinit var calElements = document.getElementsByTagName("entry");
calEntries = for (calElement in calElements)
CalendarEntry title: calElement.queryString("title")
startTimeStr: calElement.queryString("when/@startTime")
endTimeStr: calElement.queryString("when/@endTime")
location: calElement.queryString("where/@valueString")
>;
populateDateParts();
>
function prevMonth():Void selectedGregCal.add(Calendar.MONTH, -1);
selectedMonth = selectedGregCal.get(Calendar.MONTH);
populateDateParts();
>
function nextMonth():Void selectedGregCal.add(Calendar.MONTH, 1);
selectedMonth = selectedGregCal.get(Calendar.MONTH);
populateDateParts();
>
function prevYear():Void selectedGregCal.add(Calendar.YEAR, -1);
selectedYear = selectedGregCal.get(Calendar.YEAR);
populateDateParts();
>
function nextYear():Void selectedGregCal.add(Calendar.YEAR, 1);
selectedYear = selectedGregCal.get(Calendar.YEAR);
populateDateParts();
>
function populateDateParts():Void var selDate = selectedGregCal.getTime();
selectedDayInMonthStr = dayInMonthFmt.format(selDate);
selectedMonthStr = monthFmt.format(selDate);
selectedYearStr = yearFmt.format(selDate);
>
function getDateForCell(cellNumber:Integer):GregorianCalendar utilGregCal.set(Calendar.YEAR, selectedYear);
utilGregCal.set(Calendar.MONTH, selectedMonth);
utilGregCal.set(Calendar.DAY_OF_MONTH, 1);
var firstDayOffset = utilGregCal.get(Calendar.DAY_OF_WEEK);
utilGregCal.add(Calendar.DAY_OF_MONTH, firstDayOffset * -1 + cellNumber);
return utilGregCal;
>
function getDayInMonthStrForCell(cellNumber:Integer):String utilGregCal.set(Calendar.YEAR, selectedYear);
utilGregCal.set(Calendar.MONTH, selectedMonth);
utilGregCal.set(Calendar.DAY_OF_MONTH, 1);
var firstDayOffset = utilGregCal.get(Calendar.DAY_OF_WEEK);
utilGregCal.add(Calendar.DAY_OF_MONTH, firstDayOffset * -1 + cellNumber);
dayInMonthFmt.format(utilGregCal.getTime());
>
>
CalendarEntry.fx
/*
* CalendarEntry.fx -
* A calendar entry, which is part of the model.
*
* Developed 2008 by James L. Weaver (jim.weaver at lat-inc.com)
* to serve as a compiled JavaFX Script example.
*/
import java.lang.System;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.Calendar;
import java.util.Date;
class CalendarEntry private attribute sdf = new SimpleDateFormat
("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
attribute title:String;
attribute startTime:Calendar;
attribute endTime:Calendar;
attribute startTimeStr:String on replace //TODO: Accommodate all-day events
var d:Date = sdf.parse("");
var cal:Calendar = Calendar.getInstance();
cal.setTime(d);
startTime = cal;
>;
attribute endTimeStr:String on replace var d:Date = sdf.parse("");
var cal:Calendar = Calendar.getInstance();
cal.setTime(d);
endTime = cal;
>;
attribute location:String;
>
Наслаждайтесь и, как всегда, оставляйте комментарии, если у вас есть какие-либо вопросы.