import java.text.SimpleDateFormat; import java.util.Calendar; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; public class JCalendar { private static Calendar currentTime = Calendar.getInstance(); private static Label dateLabel; private static Table table; private static void updateDate(Calendar calendar) { dateLabel.setText(new SimpleDateFormat("MMM YYYY").format(calendar.getTime())); } private static void createNavigation(final Shell shell, final Calendar calendar) { Composite composite = new Composite(shell, SWT.BORDER); composite.setLayout(new GridLayout(3, true)); composite.setLayoutData( new GridData(GridData.FILL, GridData.FILL, true, true)); Button leftArrowButton = new Button(composite, SWT.PUSH); leftArrowButton.setText("<"); leftArrowButton.setLayoutData( new GridData(GridData.FILL, GridData.FILL, true, true)); leftArrowButton.addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { calendar.add(Calendar.MONTH, -1); updateDate(calendar); updateCalendar(shell, table, calendar); shell.pack(); } }); dateLabel = new Label(composite, SWT.CENTER); dateLabel.setLayoutData( new GridData(GridData.FILL, GridData.FILL, true, true)); updateDate(calendar); Button rightArrowButton = new Button(composite, SWT.PUSH); rightArrowButton.setText(">"); rightArrowButton.setLayoutData( new GridData(GridData.FILL, GridData.FILL, true, true)); rightArrowButton.addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { calendar.add(Calendar.MONTH, 1); updateDate(calendar); updateCalendar(shell, table, calendar); shell.pack(); } }); } private static void addRows(Shell shell, Calendar calendar) { int currentDayOfMonth = currentTime.get(Calendar.DAY_OF_MONTH); int currentYear = currentTime.get(Calendar.YEAR); int currentMonth = currentTime.get(Calendar.MONDAY); calendar.set(Calendar.DAY_OF_MONTH, 1); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); TableItem item = new TableItem(table, SWT.NONE); for (int i = 0; i < dayOfWeek-1; i++) { item.setText(i, " "); } int value = 1; for (int i = 0; i < 7-dayOfWeek+1; i++) { String day = Integer.toString(value); if (value < 10) { day = " " + value; } item.setText(i+dayOfWeek-1, day); value++; } while (value <= daysInMonth) { item = new TableItem(table, SWT.NONE); for (int j = 0; j < 7; j++) { if (value <= daysInMonth) { if (value == currentDayOfMonth && currentYear == year && currentMonth == month) { Color blue = new Color(shell.getDisplay(), 0, 0, 255); item.setForeground(j, blue); blue.dispose(); } String day = Integer.toString(value); if (value < 10) { day = " " + value; } item.setText(j, day); } else { item.setText(j, " "); } value++; } } } private static void updateCalendar(Shell shell, Table table, Calendar calendar) { table.removeAll(); addRows(shell, calendar); } private static void createCalendar(Shell shell, Calendar calendar) { table = new Table(shell, SWT.BORDER); table.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true)); table.setLinesVisible(true); table.setHeaderVisible(true); String[] titles = { "S", "M", "T", "W", "T", "F", "S" }; for (int i = 0; i < titles.length; i++) { TableColumn column = new TableColumn(table, SWT.NONE); column.setResizable(false); column.setText(titles[i]); } addRows(shell, calendar); for (int i = 0; i < titles.length; i++) { table.getColumn(i).pack(); } } public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display, SWT.TITLE | SWT.CLOSE | SWT.BORDER & (~SWT.RESIZE)); shell.setText("Calendar"); shell.setLayout(new GridLayout()); Calendar calendar = Calendar.getInstance(); calendar.setTime(currentTime.getTime()); createNavigation(shell, calendar); createCalendar(shell, calendar); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } }
Tuesday, April 16, 2013
Creating a Simple Calendar Application in SWT
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment