Скрыть или отключить прошлые даты в JDateChooser

Я хочу отключить или скрыть или сделать прошлые даты в JDateChooser недоступными для выбора. Как я могу это сделать? Я пытался использовать .setSelectableDateRange, но это не работает. Я также пробовал .setMinSelectableDate(), но все равно не повезло. Я не знаю, но netbeans, похоже, не знает их, потому что они не отображаются в предложениях кода. Я использую это так:

public void dateset() {
    jDateChooser1.getCalendar(). //What to put here? It doesn't have .setSelectableRange
}

Я пробовал только тот, который нашел на этом: Как показать только дату после сегодняшней даты в JCalendar

Я думаю, что тот пост уже устарел. Пожалуйста помоги.


person user3337385    schedule 28.02.2014    source источник
comment
в большинстве календарей Java можно определить особые дни   -  person mKorbel    schedule 28.02.2014
comment
что вы имеете в виду под особыми днями?   -  person user3337385    schedule 28.02.2014
comment
например праздники,   -  person mKorbel    schedule 28.02.2014
comment
Вы можете взглянуть на Как отключить или выделить даты в java-календаре. Там объясняется, как оцениваются даты. Это связано с интерфейсом IDateEvaluator, который предназначен для проверки того, является ли дата специальной или недействительной. Библиотека JCalendar предоставляет реализацию под названием MinMaxDateEvaluator, которая позволяет выбирать дату в определенном диапазоне. Надеюсь, это будет полезно.   -  person dic19    schedule 28.02.2014


Ответы (2)


Здесь:

jDateChooser1.getCalendar().

Вы пытаетесь установить границы даты для java. util.Calendar, что невозможно. Возможно, вас смущает getJCalendar(), который возвращает объект JCalendar:

jDateChooser1.getJCalendar().setMinSelectableDate(new Date()); // sets today as minimum selectable date

Обратите внимание, что вы можете установить минимальную выбираемую дату непосредственно в окне выбора даты:

jDateChooser1.setMinSelectableDate(new Date()); // sets today as minimum selectable date

Изучив исходный код JDateChooser, вы увидите, что этот метод просто перенаправляется в объект JCalendar:

public class JDateChooser extends JPanel implements ActionListener,
        PropertyChangeListener {

    protected IDateEditor dateEditor;
    protected JCalendar jcalendar;

    ...

    public void setMinSelectableDate(Date min) {
        jcalendar.setMinSelectableDate(min);
        dateEditor.setMinSelectableDate(min);
    }

    ...
}

Вы также можете взглянуть на Как отключить или выделить даты в календаре Java для лучшего понимания IDateEvaluator Интерфейс, который на самом деле является ключом ко всему этому вопросу проверки даты.

person dic19    schedule 01.03.2014
comment
Я попробую это. Спасибо - person user3337385; 03.03.2014

Попробуйте этот пример..

package chooseyourdate;

import com.toedter.calendar.JCalendar;
import com.toedter.calendar.JDateChooser;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.swing.JFrame;

public class MainFrame extends JFrame {

    private JDateChooser chooser;

    public MainFrame() {
        JCalendar calendar = new JCalendar(GregorianCalendar.getInstance());
        chooser = new JDateChooser(calendar, new Date(), "dd.MM.yy", null);
        GregorianCalendar cal = (GregorianCalendar)GregorianCalendar.getInstance();
        // set the max date
        cal.set(2015, 10, 10);
        // MinDate is the current Date
        // MaxDate you can set in the GregorianCalendar object
        chooser.setSelectableDateRange(new Date(), cal.getTime());
        chooser.addPropertyChangeListener(new PropertyChangeListener() {

            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                // to something...
            }
        });
        this.setSize(new Dimension(800, 600));

        this.getContentPane().add(chooser, BorderLayout.NORTH);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}
person Patrick    schedule 28.02.2014