簡體   English   中英

使用JDatePicker只顯示數月和數年

[英]Show only months and years with JDatePicker

我正在嘗試使用JDatePicker來顯示日歷。 但是,我只想顯示月份和年份,而不是日期。

我試着在模型和JDatePickerImpl對象周圍戳,沒有運氣。

以下是我必須從文檔中顯示JDatePicker的代碼:

   UtilCalendarModel model = new UtilCalendarModel();

    Properties p = new Properties();
    p.put("text.today", "Today");
    p.put("text.month", "Month");
    p.put("text.year", "Year");

    JDatePanelImpl datePanel = new JDatePanelImpl(model, p);

    JDatePickerImpl datePicker = new JDatePickerImpl(datePanel, new DateComponentFormatter());

提前致謝!

注意:這是我的意思的圖像。

在此輸入圖像描述

在查看JDatePicker項目中的代碼之后,我認為通過創建JDatePanelImpl類的自定義版本(可能還有其他一些類)可以實現這一點。 您想要的功能尚未在標准類中配置,但它可以作為增強功能實現,並作為提議(拉取請求)發送給JDatePicker開發人員。

只是為了確定您的應用程序需要什么:您想使用類似於下面示例的日歷? 用戶可以通過單擊下一個/上個月按鈕,從月份彈出菜單中選擇月份或選擇不同年份(使用年份微調器)來更改所選月份和年份:

可能的月/年選擇器的屏幕截圖

編輯:添加了JDatePicker類的改編版本的示例

我添加了一個代碼的修改示例和JDatePicker類的兩個改編版本。 當用戶單擊特定日期時,普通組件會關閉彈出窗口,這在這種情況下是不可能的(因為日期是隱藏的)。 我添加了一個小的OK按鈕,可以關閉日期選擇器(見上面的截圖)。 這顯然只是一個概念證據; 代碼真的需要更多的工作。

(注意:當我嘗試添加兩個修改過的類時,我的答案變得很大。因此我在GitHub上分叉了JDatePicker項目,將JDatePicker 1.3.4版的自定義重寫為1.3.4.1版,並為這兩個文件添加了鏈接而不是所有的代碼。)

// ExampleDatePickerWithoutDay class:

import java.text.*;
import javax.swing.*;
import org.jdatepicker.*;

public class ExampleDatePickerWithoutDay {
    public static void main(String[] arguments) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new ExampleDatePickerWithoutDay().createAndShowGui();
            }
        });
    }

    private void createAndShowGui() {
        JFrame frame = new JFrame("Stack Overflow");
        frame.setBounds(100, 100, 800, 200);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();

        // Set two date formats and a text label.
        DateFormat dateFormat = new SimpleDateFormat("MMMM yyyy");
        ComponentFormatDefaults.Key formatKey;
        formatKey = ComponentFormatDefaults.Key.SELECTED_DATE_FIELD;
        ComponentFormatDefaults.getInstance().setFormat(formatKey, dateFormat);
        formatKey = ComponentFormatDefaults.Key.TODAY_SELECTOR;
        ComponentFormatDefaults.getInstance().setFormat(formatKey, dateFormat);
        ComponentTextDefaults.Key textKey = ComponentTextDefaults.Key.TODAY;
        ComponentTextDefaults.getInstance().setText(textKey, "Current month");

        // Create the date picker.
        UtilCalendarModel calendarModel = new UtilCalendarModel();
        CustomDatePanel datePanel = new CustomDatePanel(calendarModel);
        CustomDatePicker datePicker = new CustomDatePicker(datePanel);

        panel.add(datePicker);
        frame.getContentPane().add(panel);
        frame.setVisible(true);
    }
}

CustomDatePanel類: CustomDatePanel.java(在GitHub上)

CustomDatePicker類: CustomDatePicker.java(在GitHub上)

暫無
暫無

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

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