簡體   English   中英

如何在其他日期選擇器中選擇日期時如何禁用日期選擇器中的日期

[英]how to disable dates in date picker when select a date in other datepicker

我有2個日期選擇器顯示在圖像中。

這里首先我選擇issuedate那么returndate日期選擇器顯示isuue日期后日期 返回datepicker不顯示后台日期的已頒發日期

在此輸入圖像描述

datepicker的代碼......

        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設置日期選擇器的上下可接受范圍。 這將限制用戶可以選擇的日期

例如...

日期選擇器

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也可以與布局管理器一起使用,因此選擇忽略它們會產生很多有趣的副作用......

看看在容器布置組件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM