CalendarCalc.java revision 2d2bb24f747c65578da13d5b13b82f0669690461
12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others. 22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License 3bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/* 4bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ******************************************************************************* 5bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Copyright (C) 1997-2008, International Business Machines Corporation and * 6bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * others. All Rights Reserved. * 7bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ******************************************************************************* 8bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 9bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 10bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpackage com.ibm.icu.dev.demo.calendar; 11bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 12bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Button; 13bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Checkbox; 14bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.CheckboxGroup; 15bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Choice; 16bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Component; 17bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Container; 18bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.FlowLayout; 19bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Font; 20bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Frame; 21bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.GridLayout; 22bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Label; 23bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.Panel; 24bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.TextField; 25bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.event.ActionEvent; 26bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.event.ActionListener; 27bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.event.ItemEvent; 28bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.event.ItemListener; 29bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.event.KeyEvent; 30bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.awt.event.WindowEvent; 31bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.text.ParsePosition; 32bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.util.Date; 33bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.util.Locale; 34bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 35bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport javax.swing.JTextField; 36bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 37bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.dev.demo.impl.DemoApplet; 38bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.dev.demo.impl.DemoUtility; 39bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.text.DateFormat; 40bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.text.SimpleDateFormat; 41bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.BuddhistCalendar; 42bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.Calendar; 43bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.GregorianCalendar; 44bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.HebrewCalendar; 45bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.IslamicCalendar; 46bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.JapaneseCalendar; 47bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.TimeZone; 48bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 49bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/** 50bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * CalendarCalc demonstrates how Date/Time formatter works. 51bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 52bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpublic class CalendarCalc extends DemoApplet 53bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert{ 54bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 55bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * For serialization 56bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 57bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private static final long serialVersionUID = 4540103433916539296L; 58bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 59bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 60bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * The main function which defines the behavior of the MultiCalendarDemo 61bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * applet when an applet is started. 62bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 63bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public static void main(String argv[]) { 64bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new CalendarCalc().showDemo(); 65bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 66bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 67bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 68bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * This creates a CalendarCalcFrame for the demo applet. 69bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 70bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public Frame createDemoFrame(DemoApplet applet) { 71bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return new CalendarCalcFrame(applet); 72bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 73bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert} 74bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 75bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/** 76bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * A Frame is a top-level window with a title. The default layout for a frame 77bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * is BorderLayout. The CalendarCalcFrame class defines the window layout of 78bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * MultiCalendarDemo. 79bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 80bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertclass CalendarCalcFrame extends Frame implements ActionListener 81bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert{ 82bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 83bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * For serialization 84bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 85bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private static final long serialVersionUID = 8901485296258761846L; 86bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 87bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert static final Locale[] locales = DemoUtility.getG7Locales(); 88bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 89bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private DemoApplet applet; 90bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private long time = System.currentTimeMillis(); 91bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 92bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private static final RollAddField kRollAddFields[] = { 93bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.YEAR, "Year" ), 94bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.MONTH, "Month" ), 95bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.WEEK_OF_MONTH, "Week of Month" ), 96bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.WEEK_OF_YEAR, "Week of Year" ), 97bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.DAY_OF_MONTH, "Day of Month" ), 98bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.DAY_OF_WEEK, "Day of Week" ), 99bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.DAY_OF_WEEK_IN_MONTH, "Day of Week in Month" ), 100bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.DAY_OF_YEAR, "Day of Year" ), 101bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.AM_PM, "AM/PM" ), 102bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.HOUR_OF_DAY, "Hour of day" ), 103bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.HOUR, "Hour" ), 104bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.MINUTE, "Minute" ), 105bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new RollAddField(Calendar.SECOND, "Second" ), 106bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert }; 107bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 108bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 109bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Constructs a new CalendarCalcFrame that is initially invisible. 110bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 111bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public CalendarCalcFrame(DemoApplet applet) 112bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 113bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert super("Multiple Calendar Demo"); 114bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.applet = applet; 115bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert init(); 116bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert start(); 117bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 118bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 119bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 120bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Initializes the applet. You never need to call this directly, it 121bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * is called automatically by the system once the applet is created. 122bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 123bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void init() 124bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 125bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert buildGUI(); 126bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 127bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert patternText.setText( calendars[0].toPattern() ); 128bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 129bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // Force an update of the display 130bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert cityChanged(); 131bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert millisFormat(); 132bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert enableEvents(KeyEvent.KEY_RELEASED); 133bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert enableEvents(WindowEvent.WINDOW_CLOSING); 134bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 135bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 136bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert //------------------------------------------------------------ 137bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // package private 138bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert //------------------------------------------------------------ 139bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert void addWithFont(Container container, Component foo, Font font) { 140bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (font != null) 141bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert foo.setFont(font); 142bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert container.add(foo); 143bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 144bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 145bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 146bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Called to start the applet. You never need to call this method 147bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * directly, it is called when the applet's document is visited. 148bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 149bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void start() 150bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 151bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // do nothing 152bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 153bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 154bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert TextField patternText; 155bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 156bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Choice dateMenu; 157bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Choice localeMenu; 158bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 159bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Button up; 160bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Button down; 161bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 162bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Checkbox getRoll; 163bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Checkbox getAdd; 164bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 165bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void buildGUI() 166bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 167bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert setBackground(DemoUtility.bgColor); 168bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert setLayout(new FlowLayout()); // shouldn't be necessary, but it is. 169bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 170bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// TITLE 171bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Label label1=new Label("Calendar Converter", Label.CENTER); 172bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert label1.setFont(DemoUtility.titleFont); 173bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert add(label1); 174bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert add(DemoUtility.createSpacer()); 175bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 176bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// IO Panel 177bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Panel topPanel = new Panel(); 178bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert topPanel.setLayout(new FlowLayout()); 179bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 180bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert CheckboxGroup group1= new CheckboxGroup(); 181bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 182bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // Set up the controls for each calendar we're demonstrating 183bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < calendars.length; i++) 184bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 185bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Label label = new Label(calendars[i].name, Label.RIGHT); 186bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert label.setFont(DemoUtility.labelFont); 187bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert topPanel.add(label); 188bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 189bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert topPanel.add(calendars[i].text); 190bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 191bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert final int j = i; 192bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert calendars[i].text.addActionListener( new ActionListener() { 193bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void actionPerformed(ActionEvent e) { 194bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert textChanged(j); 195bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 196bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } ); 197bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 198bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert calendars[i].rollAdd.setCheckboxGroup(group1); 199bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert topPanel.add(calendars[i].rollAdd); 200bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 201bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert calendars[0].rollAdd.setState(true); // Make the first one selected 202bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 203bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Label label4=new Label("Pattern", Label.RIGHT); 204bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert label4.setFont(DemoUtility.labelFont); 205bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert topPanel.add(label4); 206bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 207bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert patternText=new TextField(FIELD_COLUMNS); 208bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert patternText.setFont(DemoUtility.editFont); 209bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert topPanel.add(patternText); 210bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert topPanel.add(new Label("")); 211bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 212bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert DemoUtility.fixGrid(topPanel,3); 213bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert add(topPanel); 214bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert add(DemoUtility.createSpacer()); 215bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 216bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// ROLL / ADD 217bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Panel rollAddPanel=new Panel(); 218bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 219bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert rollAddPanel.setLayout(new FlowLayout()); 220bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 221bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Panel rollAddBoxes = new Panel(); 222bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 223bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert rollAddBoxes.setLayout(new GridLayout(2,1)); 224bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert CheckboxGroup group2= new CheckboxGroup(); 225bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert getRoll = new Checkbox("Roll",group2, false); 226bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert getAdd = new Checkbox("Add",group2, true); 227bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 228bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert rollAddBoxes.add(getRoll); 229bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert rollAddBoxes.add(getAdd); 230bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 231bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 232bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Label dateLabel=new Label("Date Fields"); 233bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert dateLabel.setFont(DemoUtility.labelFont); 234bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 235bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert dateMenu= new Choice(); 236bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert dateMenu.setBackground(DemoUtility.choiceColor); 237bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < kRollAddFields.length; i++) { 238bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert dateMenu.addItem(kRollAddFields[i].name); 239bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (kRollAddFields[i].field == Calendar.MONTH) { 240bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert dateMenu.select(i); 241bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 242bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 243bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 244bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Panel upDown = new Panel(); 245bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 246bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert upDown.setLayout(new GridLayout(2,1)); 247bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 248bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // *** If the images are not found, we use the label. 249bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert up = new Button("^"); 250bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert down = new Button("v"); 251bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert up.setBackground(DemoUtility.bgColor); 252bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert down.setBackground(DemoUtility.bgColor); 253bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert upDown.add(up); 254bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert upDown.add(down); 255bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert up.addActionListener(this); 256bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert down.addActionListener(this); 257bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 258bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 259bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert rollAddPanel.add(dateLabel); 260bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert rollAddPanel.add(dateMenu); 261bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert rollAddPanel.add(rollAddBoxes); 262bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert rollAddPanel.add(upDown); 263bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 264bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 265bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Panel localePanel = new Panel(); 266bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 267bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // Make the locale popup menus 268bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert localeMenu= new Choice(); 269bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Locale defaultLocale = Locale.getDefault(); 270bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int bestMatch = -1, thisMatch = -1; 271bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int selectMe = 0; 272bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 273bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < locales.length; i++) { 274bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (i > 0 && locales[i].getLanguage().equals(locales[i-1].getLanguage()) || 275bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert i < locales.length - 1 && 276bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert locales[i].getLanguage().equals(locales[i+1].getLanguage())) 277bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 278bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert localeMenu.addItem( locales[i].getDisplayName() ); 279bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } else { 280bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert localeMenu.addItem( locales[i].getDisplayLanguage()); 281bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 282bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 283bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert thisMatch = DemoUtility.compareLocales(locales[i], defaultLocale); 284bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 285bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (thisMatch >= bestMatch) { 286bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert bestMatch = thisMatch; 287bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert selectMe = i; 288bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 289bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 290bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 291bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert localeMenu.setBackground(DemoUtility.choiceColor); 292bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert localeMenu.select(selectMe); 293bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 294bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Label localeLabel =new Label("Display Locale"); 295bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert localeLabel.setFont(DemoUtility.labelFont); 296bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 297bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert localePanel.add(localeLabel); 298bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert localePanel.add(localeMenu); 299bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert DemoUtility.fixGrid(localePanel,2); 300bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 301bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert localeMenu.addItemListener( new ItemListener() { 302bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void itemStateChanged(ItemEvent e) { 303bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Locale loc = locales[localeMenu.getSelectedIndex()]; 304bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert System.out.println("Change locale to " + loc.getDisplayName()); 305bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 306bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < calendars.length; i++) { 307bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert calendars[i].setLocale(loc); 308bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 309bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert millisFormat(); 310bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 311bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } ); 312bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 313bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert add(rollAddPanel); 314bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert add(DemoUtility.createSpacer()); 315bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert add(localePanel); 316bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert add(DemoUtility.createSpacer()); 317bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 318bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// COPYRIGHT 319bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Panel copyrightPanel = new Panel(); 320bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert addWithFont (copyrightPanel,new Label(DemoUtility.copyright1, Label.LEFT), 321bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert DemoUtility.creditFont); 322bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert DemoUtility.fixGrid(copyrightPanel,1); 323bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert add(copyrightPanel); 324bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 325bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 326bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 327bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * This function is called when users change the pattern text. 328bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 329bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void setFormatFromPattern() { 330bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert String timePattern = patternText.getText(); 331bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 332bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < calendars.length; i++) { 333bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert calendars[i].applyPattern(timePattern); 334bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 335bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 336bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert millisFormat(); 337bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 338bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 339bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 340bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * This function is called when it is necessary to parse the time 341bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * string in one of the formatted date fields 342bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 343bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void textChanged(int index) { 344bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert String rightString = calendars[index].text.getText(); 345bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 346bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ParsePosition status = new ParsePosition(0); 347bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 348bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (rightString.length() == 0) 349bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 350bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert errorText("Error: no input to parse!"); 351bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return; 352bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 353bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 354bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert try { 355bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Date date = calendars[index].format.parse(rightString, status); 356bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert time = date.getTime(); 357bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 358bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert catch (Exception e) { 359bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < calendars.length; i++) { 360bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (i != index) { 361bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert calendars[i].text.setText("ERROR"); 362bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 363bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 364bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert errorText("Exception: " + e.getClass().toString() + " parsing: "+rightString); 365bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return; 366bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 367bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 368bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int start = calendars[index].text.getSelectionStart(); 369bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int end = calendars[index].text.getSelectionEnd(); 370bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 371bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert millisFormat(); 372bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 373bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert calendars[index].text.select(start,end); 374bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 375bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 376bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 377bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * This function is called when it is necessary to format the time 378bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * in the "Millis" text field. 379bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 380bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void millisFormat() { 381bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert String out = ""; 382bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 383bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < calendars.length; i++) { 384bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert try { 385bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert out = calendars[i].format.format(new Date(time)); 386bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert calendars[i].text.setText(out); 387bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 388bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert catch (Exception e) { 389bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert calendars[i].text.setText("ERROR"); 390bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert errorText("Exception: " + e.getClass().toString() + " formatting " 391bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert + calendars[i].name + " " + time); 392bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 393bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 394bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 395bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 396bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 397bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 398bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * This function is called when users change the pattern text. 399bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 400bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void patternTextChanged() { 401bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert setFormatFromPattern(); 402bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 403bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 404bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 405bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * This function is called when users select a new representative city. 406bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 407bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void cityChanged() { 408bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert TimeZone timeZone = TimeZone.getDefault(); 409bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 410bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < calendars.length; i++) { 411bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert calendars[i].format.setTimeZone(timeZone); 412bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 413bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert millisFormat(); 414bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 415bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 416bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 417bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * This function is called when users select a new time field 418bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * to add or roll its value. 419bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 420bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void dateFieldChanged(boolean isUp) { 421bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int field = kRollAddFields[dateMenu.getSelectedIndex()].field; 422bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 423bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < calendars.length; i++) 424bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 425bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (calendars[i].rollAdd.getState()) 426bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 427bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Calendar c = calendars[i].calendar; 428bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert c.setTime(new Date(time)); 429bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 430bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (getAdd.getState()) { 431bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert c.add(field, isUp ? 1 : -1); 432bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } else { 433bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert c.roll(field, isUp); 434bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 435bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 436bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert time = c.getTime().getTime(); 437bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert millisFormat(); 438bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert break; 439bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 440bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 441bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 442bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 443bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 444bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Print out the error message while debugging this program. 445bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 446bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void errorText(String s) 447bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 448bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (true) { 449bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert System.out.println(s); 450bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 451bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 452bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 453bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 454bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Called if an action occurs in the CalendarCalcFrame object. 455bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 456bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void actionPerformed(ActionEvent evt) 457bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 458bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // *** Button events are handled here. 459bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Object obj = evt.getSource(); 460bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert System.out.println("action " + obj); 461bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (obj instanceof Button) { 462bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (evt.getSource() == up) { 463bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert dateFieldChanged(false); 464bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } else 465bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (evt.getSource() == down) { 466bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert dateFieldChanged(true); 467bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 468bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 469bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 470bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 471bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /** 472bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Handles the event. Returns true if the event is handled and should not 473bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * be passed to the parent of this component. The default event handler 474bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * calls some helper methods to make life easier on the programmer. 475bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 476bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert protected void processKeyEvent(KeyEvent evt) 477bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 478bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert System.out.println("key " + evt); 479bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (evt.getID() == KeyEvent.KEY_RELEASED) { 480bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (evt.getSource() == patternText) { 481bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert patternTextChanged(); 482bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 483bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert else { 484bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert for (int i = 0; i < calendars.length; i++) { 485bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (evt.getSource() == calendars[i].text) { 486bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert textChanged(i); 487bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 488bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 489bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 490bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 491bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 492bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 493bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert protected void processWindowEvent(WindowEvent evt) 494bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 495bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert System.out.println("window " + evt); 496bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (evt.getID() == WindowEvent.WINDOW_CLOSING && 497bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert evt.getSource() == this) { 498bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.hide(); 499bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.dispose(); 500bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 501bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (applet != null) { 502bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert applet.demoClosed(); 503bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } else System.exit(0); 504bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 505bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 506bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 507bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert /* 508bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert protected void processEvent(AWTEvent evt) 509bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 510bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (evt.getID() == AWTEvent. Event.ACTION_EVENT && evt.target == up) { 511bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert dateFieldChanged(true); 512bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return true; 513bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 514bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert else if (evt.id == Event.ACTION_EVENT && evt.target == down) { 515bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert dateFieldChanged(false); 516bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return true; 517bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 518bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 519bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 520bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 521bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private static final int FIELD_COLUMNS = 35; 522bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 523bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 524bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert class CalendarRec { 525bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public CalendarRec(String nameStr, Calendar cal) 526bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 527bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert name = nameStr; 528bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert calendar = cal; 529bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert rollAdd = new Checkbox(); 530bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 531bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert text = new JTextField("",FIELD_COLUMNS); 532bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert text.setFont(DemoUtility.editFont); 533bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 534bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert format = DateFormat.getDateInstance(cal, DateFormat.FULL, 535bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Locale.getDefault()); 536bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert //format.applyPattern(DEFAULT_FORMAT); 537bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 538bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 539bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void setLocale(Locale loc) { 540bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert String pattern = toPattern(); 541bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 542bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert format = DateFormat.getDateInstance(calendar, DateFormat.FULL, 543bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert loc); 544bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert applyPattern(pattern); 545bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 546bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 547bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void applyPattern(String pattern) { 548bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (format instanceof SimpleDateFormat) { 549bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ((SimpleDateFormat)format).applyPattern(pattern); 550bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//hey {al} - 551bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// } else if (format instanceof java.text.SimpleDateFormat) { 552bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// ((java.text.SimpleDateFormat)format).applyPattern(pattern); 553bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 554bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 555bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 556bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private String toPattern() { 557bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (format instanceof SimpleDateFormat) { 558bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return ((SimpleDateFormat)format).toPattern(); 559bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//hey {al} - 560bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// } else if (format instanceof java.text.SimpleDateFormat) { 561bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// return ((java.text.SimpleDateFormat)format).toPattern(); 562bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 563bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return ""; 564bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 565bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 566bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Calendar calendar; 567bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert DateFormat format; 568bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert String name; 569bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert JTextField text; 570bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert Checkbox rollAdd; 571bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 572bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 573bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private final CalendarRec[] calendars = { 574bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new CalendarRec("Gregorian", new GregorianCalendar()), 575bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new CalendarRec("Hebrew", new HebrewCalendar()), 576bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new CalendarRec("Islamic (civil)", makeIslamic(true)), 577bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new CalendarRec("Islamic (true)", makeIslamic(false)), 578bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new CalendarRec("Buddhist", new BuddhistCalendar()), 579bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert new CalendarRec("Japanese", new JapaneseCalendar()), 580bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert// new CalendarRec("Chinese", new ChineseCalendar()), 581bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert }; 582bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 583bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert static private final Calendar makeIslamic(boolean civil) { 584bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert IslamicCalendar cal = new IslamicCalendar(); 585bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert cal.setCivil(civil); 586bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert return cal; 587bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 588bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert} 589bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 590bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertclass RollAddField { 591bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert RollAddField(int field, String name) { 592bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.field = field; 593bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.name = name; 594bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 595bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int field; 596bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert String name; 597bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert} 598