Pivot provides two types of calendar components: a standalone Calendar component that can be used anywhere within an application's user interface, and a CalendarButton component that, like a list button, displays a popup calendar when pressed.
The following sample application demonstrates both component types. Selecting a date on one calendar automatically updates the other calendar as well as setting the text of a label to the currently selected date:
The BXML source is as follows:
<Window title="Calendars" maximized="true"
xmlns:bxml="http://pivot.apache.org/bxml"
xmlns="org.apache.pivot.wtk">
<Border styles="{padding:8}">
<Form>
<Form.Section>
<Border Form.label="Calendar" styles="{color:10}">
<Calendar bxml:id="calendar" selectedDate="${calendarButton.selectedDate}">
<calendarSelectionListeners>
function selectedDateChanged(calendar, previousSelectedDate) {
calendar.year = calendar.selectedDate.year;
calendar.month = calendar.selectedDate.month;
}
</calendarSelectionListeners>
</Calendar>
</Border>
<CalendarButton bxml:id="calendarButton" Form.label="Calendar button"
selectedDate="${calendar.selectedDate}"/>
</Form.Section>
<Form.Section>
<Label bxml:id="selectedDateLabel" Form.label="Selected date"
text="${calendar.selectedDate}"/>
</Form.Section>
</Form>
</Border>
</Window>
Note that there is no Java or script code associated with this example. The calendars are kept in sync via a Pivot feature called property binding. This feature allows a caller to declaratively create a relationship between a source and target property such that changes to the source are automatically reflected in the target.
In BXML, a binding relationship is created via the "${...}" syntax shown in the sample code. For example, the following markup ensures that any changes to the "calendar.selectedDate" property are automatically propagated to the Label's "text" property:
<Label bxml:id="selectedDateLabel" Form.label="Selected date"
text="${calendar.selectedDate}"/>
Property binding is discussed in more detail in the Property Binding section.
Next: Menus


