Java/SWT JFace Eclipse/Calendar

Материал из Java эксперт
Перейти к: навигация, поиск

SWT Calendar

   <source lang="java">

/**

  • this is a example for Kalendar dialog for swt dialog.
  • author: yin_zhiguo
  • email: yin_zhiguo@hotmail.ru
  • /

import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Dialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.MouseEvent; public class KalendarDialog extends Dialog implements MouseListener {

   private Display display = null;
   private Date nowDate = null; //current date
   private String selectedDate = null; //selected date
   private Shell shell = null;
   private GridLayout gridLayout = null;
   private GridData gridData = null;
   private CLabel sunday = null;
   private CLabel monday = null;
   private CLabel tuesday = null;
   private CLabel wednesday = null;
   private CLabel thursday = null;
   private CLabel friday = null;
   private CLabel saturday = null;
   private Button yearUp = null;
   private Button yearNext = null;
   private Button monthUp = null;
   private Button monthNext = null;
   private CLabel nowLabel = null;
   private CLabel[] days = new CLabel[42];
   public KalendarDialog(Shell parent, int style) {
       super(parent, style);
   }
   public KalendarDialog(Shell parent) {
       this(parent, 0);
   }
   private int getLastDayOfMonth(int year, int month) {
       if (month == 1 ||
           month == 3 ||
           month == 5 ||
           month == 7 ||
           month == 8 ||
           month == 10 ||
           month == 12) {
           return 31;
       }
       if (month == 4 ||
           month == 6 ||
           month == 9 ||
           month == 11) {
           return 30;
       }
       if (month == 2) {
           if (isLeapYear(year)) {
               return 29;
           } else {
               return 28;
           }
       }
       return 0;
   }
   public boolean isLeapYear(int year) {
       return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
   }
   private void moveTo(int type, int value) {
       Calendar now = Calendar.getInstance(); //get current Calendar object
       now.setTime(nowDate); //set current date
       now.add(type, value); //add to spec time.
       nowDate = new Date(now.getTimeInMillis()); //result
       SimpleDateFormat formatter = new 

SimpleDateFormat("yyyy-MM");//format date

       nowLabel.setText(formatter.format(nowDate)); //set to label
       setDayForDisplay(now);
   }
   private void setDayForDisplay(Calendar now) {
       int currentDay = now.get(Calendar.DATE);
       now.add(Calendar.DAY_OF_MONTH, -(now.get(Calendar.DATE) - 1)); //
       int startIndex = now.get(Calendar.DAY_OF_WEEK) - 1; //
       int year = now.get(Calendar.YEAR); //
       int month = now.get(Calendar.MONTH) + 1; //
       int lastDay = this.getLastDayOfMonth(year, month); //
       int endIndex = startIndex + lastDay - 1; //
       int startday = 1;
       for (int i = 0; i < 42; i++) {
           Color temp = days[i].getBackground();
           if (temp.equals(display.getSystemColor(SWT.COLOR_BLUE))) {
               

days[i].setBackground(display.getSystemColor(SWT.COLOR_WHITE));

           }
       }
       for (int i = 0; i < 42; i++) {
           if (i >= startIndex && i <= endIndex) {
               days[i].setText("" + startday);
               if (startday == currentDay) {
                   

days[i].setBackground(display.getSystemColor(SWT.COLOR_BLUE)); //

               }
               startday++;
           } else {
               days[i].setText("");
           }
       }
   }
   public void previousYear() {
       moveTo(Calendar.YEAR, -1);
   }
   public void nextYear() {
       moveTo(Calendar.YEAR, 1);
   }
   public void nextMonth() {
       moveTo(Calendar.MONTH, 1);
   }
   public void previousMonth() {
       moveTo(Calendar.MONTH, -1);
   }
   public void mouseDoubleClick(MouseEvent e) {
       CLabel day = (CLabel) e.getSource();
       if(!day.getText().equals(""))
       {
           this.selectedDate = nowLabel.getText() + "-" + day.getText();
           this.shell.close();
       }
   }
   public void mouseDown(MouseEvent e) {}
   public void mouseUp(MouseEvent e) {}
   public Object open() {
       Shell parent = getParent();
       display = Display.getDefault();
       shell = new Shell(parent,  SWT.TITLE |SWT.PRIMARY_MODAL);
       shell.setText("Calendar ver0.02");
       shell.setSize(230, 220);
       gridLayout = new GridLayout();
       gridLayout.numColumns = 7;
       shell.setLayout(gridLayout);
       gridData = new GridData(GridData.FILL_HORIZONTAL);
       yearUp = new Button(shell, SWT.PUSH | SWT.FLAT);
       yearUp.setText("<");
       yearUp.setLayoutData(gridData);
       yearUp.addSelectionListener(new SelectionAdapter() {
           public void widgetSelected(SelectionEvent e) {
               previousYear();
           }
       });
       gridData = new GridData(GridData.FILL_HORIZONTAL);
       monthUp = new Button(shell, SWT.PUSH | SWT.FLAT);
       monthUp.setText("<<");
       monthUp.setLayoutData(gridData);
       monthUp.addSelectionListener(new SelectionAdapter() {
           public void widgetSelected(SelectionEvent e) {
               previousMonth();
           }
       });
       nowLabel = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);
       gridData = new GridData(GridData.FILL_HORIZONTAL);
       gridData.horizontalSpan = 3;
       nowLabel.setLayoutData(gridData);
       SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
       nowLabel.setText(formatter.format(new Date()));
       gridData = new GridData(GridData.FILL_HORIZONTAL);
       monthNext = new Button(shell, SWT.PUSH | SWT.FLAT);
       monthNext.setText(">>");
       monthNext.setLayoutData(gridData);
       monthNext.addSelectionListener(new SelectionAdapter() {
           public void widgetSelected(SelectionEvent e) {
               nextMonth();
           }
       });
       gridData = new GridData(GridData.FILL_HORIZONTAL);
       yearNext = new Button(shell, SWT.PUSH | SWT.FLAT);
       yearNext.setText(">");
       yearNext.setLayoutData(gridData);
       yearNext.addSelectionListener(new SelectionAdapter() {
           public void widgetSelected(SelectionEvent e) {
               nextYear();
           }
       });
       sunday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);
       gridData = new GridData(GridData.FILL_HORIZONTAL |
                               GridData.FILL_VERTICAL);
       gridData.widthHint = 20;
       gridData.heightHint = 20;
       sunday.setLayoutData(gridData);
       sunday.setText("Sun");
       monday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);
       gridData = new GridData(GridData.FILL_HORIZONTAL |
                               GridData.FILL_VERTICAL);
       gridData.widthHint = 20;
       gridData.heightHint = 20;
       monday.setLayoutData(gridData);
       monday.setText("Mon");
       tuesday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);
       gridData = new GridData(GridData.FILL_HORIZONTAL |
                               GridData.FILL_VERTICAL);
       gridData.widthHint = 20;
       gridData.heightHint = 20;
       tuesday.setLayoutData(gridData);
       tuesday.setText("Tue");
       wednesday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);
       gridData = new GridData(GridData.FILL_HORIZONTAL |
                               GridData.FILL_VERTICAL);
       gridData.widthHint = 20;
       gridData.heightHint = 20;
       wednesday.setLayoutData(gridData);
       wednesday.setText("Wed");
       thursday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);
       gridData = new GridData(GridData.FILL_HORIZONTAL |
                               GridData.FILL_VERTICAL);
       gridData.widthHint = 20;
       gridData.heightHint = 20;
       thursday.setLayoutData(gridData);
       thursday.setText("Thu");
       friday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);
       gridData = new GridData(GridData.FILL_HORIZONTAL |
                               GridData.FILL_VERTICAL);
       gridData.widthHint = 20;
       gridData.heightHint = 20;
       friday.setLayoutData(gridData);
       friday.setText("Fri");
       saturday = new CLabel(shell, SWT.CENTER | SWT.SHADOW_OUT);
       gridData = new GridData(GridData.FILL_HORIZONTAL |
                               GridData.FILL_VERTICAL);
       gridData.widthHint = 20;
       gridData.heightHint = 20;
       saturday.setLayoutData(gridData);
       saturday.setText("Sat");
       for (int i = 0; i < 42; i++) {
           days[i] = new CLabel(shell, SWT.FLAT | SWT.CENTER);
           gridData = new GridData(GridData.FILL_HORIZONTAL |
                                   GridData.FILL_VERTICAL);
           days[i].setLayoutData(gridData);
           days[i].setBackground(display.getSystemColor(SWT.COLOR_WHITE));
           days[i].addMouseListener(this);
           days[i].setToolTipText("double click get current date.");
       }
       Calendar now = Calendar.getInstance(); //
       nowDate = new Date(now.getTimeInMillis());
       setDayForDisplay(now);
       shell.open();
       Display display = parent.getDisplay();
       while (!shell.isDisposed()) {
           if (!display.readAndDispatch()) {
               display.sleep();
           }
       }
       return selectedDate;
   }
   /**
    * @param args
    */
   public static void main(String[] args) {
       Display display = new Display();
       final Shell shell = new Shell(display);
       shell.setText("");
       FillLayout fl = new FillLayout();
       shell.setLayout(fl);
       Button open = new Button(shell, SWT.PUSH);
       open.setText("open");
       open.addSelectionListener(new SelectionAdapter() {
           public void widgetSelected(SelectionEvent e) {
             KalendarDialog cd = new KalendarDialog(shell);
               System.out.println(cd.open());
           }
       });
       shell.pack();
       shell.open();
       while (!shell.isDisposed()) {
           if (!display.readAndDispatch()) {
               display.sleep();
           }
       }
   }

}


      </source>