Поставить некоторые условия на дату в календаре SWT - PullRequest
0 голосов
/ 07 мая 2019

Как я могу поставить некоторые условия в моем календаре в SWT?Например, чтобы сделать дату между 1970 и 2030 годами, в календаре не должно быть больше этого диапазона.

1 Ответ

2 голосов
/ 07 мая 2019

У вас нет внутреннего способа сделать это.Таким образом, вы можете иметь некоторое условие, чтобы проверить, находится ли дата выбора между минимальной и максимальной датой, и вы можете выдать ошибку, как показано ниже, и вы можете сбросить выбор на любую дату.

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

/**
 * The Class RestrictYearInCalender.
 * 
 * @author subash
 */
public class RestrictYearInCalender {

    /** The min date. */
    private static Date minDate;

    /** The max date. */
    private static Date maxDate;

    /** The format. */
    private static SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");

    /**
     * The main method.
     *
     * @param args the arguments
     */
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("Calender");
        shell.setLayout(new RowLayout());

        Calendar cal = Calendar.getInstance();

        /* Set the minimum */
        cal.set(1970, 0, 0);
        minDate = cal.getTime();

        /* Set the maximum */
        cal.set(2030, 0, 0);
        maxDate = cal.getTime();

        DateTime calendar = new DateTime(shell, SWT.CALENDAR);
        calendar.addListener(SWT.Selection, new Listener()
        {
            @Override
            public void handleEvent(Event arg0)
            {
                /* Get the selection from the calender drop down*/
                int day = calendar.getDay();
                int month = calendar.getMonth() + 1;
                int year = calendar.getYear();

                /* Parse the selection */
                Date newDate = null;
                try
                {
                    newDate = format.parse(day + "/" + month + "/" + year);
                }
                catch (ParseException e)
                {
                    return;
                }

                /* Compare it to the minimum and maximum */
                if(newDate.after(maxDate) || newDate.before(minDate))
                {
                    /* Set to the maximum or maximum according to requirement*/
                    Calendar cal = Calendar.getInstance();
                    cal.setTime(minDate);
                    calendar.setMonth(cal.get(Calendar.MONTH));
                    calendar.setDay(cal.get(Calendar.DAY_OF_MONTH));
                    calendar.setYear(cal.get(Calendar.YEAR));
                    MessageDialog.openError(Display.getDefault().getActiveShell(), "Error", "Range selection should be between 1970-2030");
                }
            }
        });

        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
}

Calender Error dialog

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...