Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JDateChooser上隐藏或禁用过去的日期_Java_Swing_Netbeans_Jdatechooser - Fatal编程技术网

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

Java 在JDateChooser上隐藏或禁用过去的日期,java,swing,netbeans,jdatechooser,Java,Swing,Netbeans,Jdatechooser,我想禁用、隐藏或使JDateChooser中的过去日期不可选择。我怎么做这个?我尝试使用.setSelectableDateRange,但它不起作用。我也尝试了.setMinSelectableDate(),但仍然没有成功。我不知道,但netbeans似乎不知道这些,因为这些并没有出现在代码建议中。我是这样使用它的: public void dateset() { jDateChooser1.getCalendar(). //What to put here? It doesn't ha

我想禁用、隐藏或使JDateChooser中的过去日期不可选择。我怎么做这个?我尝试使用
.setSelectableDateRange
,但它不起作用。我也尝试了
.setMinSelectableDate()
,但仍然没有成功。我不知道,但netbeans似乎不知道这些,因为这些并没有出现在代码建议中。我是这样使用它的:

public void dateset() {
    jDateChooser1.getCalendar(). //What to put here? It doesn't have .setSelectableRange
}
我只试了我在这张照片上找到的那张:

我认为那个帖子已经过时了。请帮助。

试试这个例子

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);
    }
}
在这里:

您试图将日期边界设置为一个不可能的对象。可能您对哪个返回对象感到困惑:

注意:您可以直接在日期选择器上设置最小可选日期:

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
接口有关,该接口用于验证日期是否特殊或无效。JCalendar库提供了一个名为
MinMaxDateEvaluator
的实现,它允许选择定义范围内的日期。希望对你有帮助。我试试这个。谢谢
jDateChooser1.setMinSelectableDate(new Date()); // sets today as minimum selectable date
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);
    }

    ...
}