在JDateChooser上隐藏或禁用过去的日期

时间:2014-02-28 10:23:43

标签: java swing netbeans jdatechooser

我想禁用或隐藏或使JDateChooser中的过去日期无法选择。我该怎么做?我试过使用.setSelectableDateRange但它不起作用。我也试过.setMinSelectableDate()但仍然没有运气。我不知道但netbeans似乎并不知道那些因为那些没有出现在代码建议中。我正在使用它:

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

我只尝试过在这个问题上找到的那个:How to show only date after the date of today in JCalendar

我认为该帖已经过时了。请帮忙。

2 个答案:

答案 0 :(得分:5)

下面:

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);
    }

    ...
}

您可能还需要查看How to disable or highlight the dates in java calendar以便更好地了解IDateEvaluator界面,这实际上是整个日期验证问题的关键。

答案 1 :(得分:0)

试试这个例子..

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);
    }
}