Как сделать календарь в javafx
Перейти к содержимому

Как сделать календарь в javafx

  • автор:

Создание модифицированного календаря из DataPicker(popupContent)

Author24 — интернет-сервис помощи студентам

Не могу найти на отдельной вкладке создать календарь из 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); } }

Календарь в Java

Запомни, что в программировании очень часто начинается нумерация с 0, а не 1.

– user178191

3 авг 2015 в 10:30

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Потому что 7 — это значение константы AUGUST . Нумерация идет с нуля ( JANUARY — 0)

Отслеживать

ответ дан 3 авг 2015 в 10:28

4,169 1 1 золотой знак 27 27 серебряных знаков 41 41 бронзовый знак

Я так и подумал. Но число месяца выводится верно, год тоже, а что же месяц так?

3 авг 2015 в 10:43

Возможно, Вам будет полезен этот вопрос: Why is January month 0 in Java Calendar?. Некоторые утверждают, что это из-за C API, где месяц начинался с нуля. Другие — что года/дни имеют числовой формат, а месяцы — преимущественно строковый.

Календарь JavaFX Script Calendar, отображающий канал Календаря Google

Сегодня я хотел бы показать вам скромное начало календаря JavaFX Script, который отображает канал Календаря Google. В настоящее время он указывает на мой Календарь Google, который я редко заполнял некоторыми примерами данных. Вы можете изменить программу, чтобы она указывала на ваш Календарь Google, если вы выберете.

Со временем я улучшу эту программу Календаря, но хотел продемонстрировать способность JavaFX Script легко анализировать поток XML через Интернет. Возможно, вы также захотите взглянуть на статью «Скомпилированный JavaFX Script Now Speaks JSON», которая демонстрирует анализ потоков JSON через Интернет. Вот скриншот сегодняшнего примера, за которым следует код программы:

Calendarjfx


Код позади пользовательского интерфейса

Очевидно, что в этот календарь можно внести множество улучшений, но вот четыре исходных файла, которые составляют этот пример в его текущем состоянии:


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;
>

Наслаждайтесь и, как всегда, оставляйте комментарии, если у вас есть какие-либо вопросы.

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

twobomb

Слона нужно есть по кусочкам.
1. Напишите метод, который печатает месяц. Входные данные будут — количество дней и день недели, на который приходится первое число.
2. Напишите метод, который печатает год. Входные данные будут — день недели, на который приходится первое число и флаг високосного года. Пусть этот метод запускает метод из п.1 выдавая ему нужную информацию.
3. Напишите метод, который печатает календарь на несколько лет. Если вы реализуете п1 и п2, с п3, думаю, уже разберетесь.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *