java - 在其他日期选择器中选择日期时如何禁用日期选择器中的日期

标签 java swing date datepicker

图像中显示了 2 个日期选择器。

在这里,我首先选择发布日期,然后返回日期 日期选择器显示发布日期之后的日期backword 日期的发布日期对于返回日期选择器不可见

enter image description here

日期选择器的代码...

        JLabel lblIssueDate = new JLabel("Issue Date");
        lblIssueDate.setBounds(85, 47, 137, 14);
        issuePanel.add(lblIssueDate);

        issueDate = new JXDatePicker();
        java.util.Date utilDate=new Date();
        java.sql.Date sqldate=new java.sql.Date(utilDate.getTime());
        issueDate.setDate(sqldate);
        issueDate.setBounds(232, 44, 184, 20);
        issuePanel.add(issueDate);

        JLabel lblReturnDate = new JLabel("Return Date");
        lblReturnDate.setBounds(85, 113, 137, 14);
        issuePanel.add(lblReturnDate);

        returnDate = new JXDatePicker();
        returnDate.setBounds(232, 110, 184, 20);
        issuePanel.add(returnDate);

最佳答案

基本上,您可以通过其 JXMonthView 设置日期选择器的可接受上限和下限。这将限制用户可以选择的日期

例如……

DatePicker

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import org.jdesktop.swingx.JXDatePicker;

public class TestDatePicker {

    public static void main(String[] args) {
        new TestDatePicker();
    }

    public TestDatePicker() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JXDatePicker issueDate;
        private final JXDatePicker returnDate;

        public TestPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;

            JLabel lblIssueDate = new JLabel("Issue Date");
            add(lblIssueDate, gbc);

            issueDate = new JXDatePicker();
            returnDate = new JXDatePicker();

            issueDate.addPropertyChangeListener("date", new PropertyChangeListener() {
                @Override
                public void propertyChange(PropertyChangeEvent evt) {
                    System.out.println("date");
                    Date selectedDate = issueDate.getDate();
                    returnDate.getMonthView().setLowerBound(selectedDate);
                }
            });
            java.util.Date utilDate = new Date();
            java.sql.Date sqldate = new java.sql.Date(utilDate.getTime());
            issueDate.setDate(sqldate);
            gbc.gridx++;
            add(issueDate, gbc);

            gbc.gridx = 0;
            gbc.gridy++;
            JLabel lblReturnDate = new JLabel("Return Date");
            add(lblReturnDate, gbc);

            gbc.gridx++;
            add(returnDate, gbc);
        }
    }

}

现在,如果您希望能够选择 IssueDate 之前的日期,您可以改用 setUpperBound

如果您还想排除所选日期,则需要使用 Calendar 并按需要的方向滚动一天以将其包括在内...

我还强烈建议使用适当的布局管理器,因为它们将处理系统之间的各种差异以及字体渲染器的方式等。

Swing 也被设计为与布局管理器一起工作,因此选择忽略它们可能会产生很多有趣的副作用...

看看Laying Out Components Within a Container

关于java - 在其他日期选择器中选择日期时如何禁用日期选择器中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21925932/

相关文章:

java.sql.timestamp 与日期

date - 使用 Dart 将年数转换为日期

swift - DateFormatter 在特定设备上返回 nil

java - 通过 JNI 做一些事情是不是个好主意?

java - BluetoothSocket OutputStream.write() 问题

Java 小程序 Jbutton 错误

java - 像在 Skype 中一样为 Java 应用程序创建图标

java - 如何使用@ComponentScan扫描当前包和其他包?

javascript - UTF-8:从 Ajax 客户端到 Tomcat 服务器的希伯来字符集

java - 如何在 Java 开发的 Swing GUI 中显示 python 程序输出的值