4

我正在尝试使用 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());

提前致谢!

注意:这是我的意思的图像。

在此处输入图像描述

4

1 回答 1

4

在查看了JDatePicker项目中的代码之后,我认为这可以通过制作该类的自定义版本JDatePanelImpl(可能还有其他一些类)来实现。您想要的功能还不能在标准类中配置,但它可以作为增强实现并作为提案(拉取请求)发送给 JDatePicker 开发人员。

只是为了确定您的应用程序需要什么:您想使用类似于以下示例的日历吗?用户可以通过单击下一个/上一个月份按钮、从月份弹出菜单中选择一个月份或选择不同的年份(使用年份微调器)来更改选定的月份和年份:

可能的月/年选择器的屏幕截图

编辑:添加了 JDatePicker 类的改编版本的示例

我添加了您的代码的修改示例和 JDatePicker 类的两个改编版本。当用户单击特定日期时,普通组件会关闭弹出窗口,这在这种情况下是不可能的(因为日期是隐藏的)。我添加了一个小的 OK 按钮,可以关闭日期选择器(参见上面的屏幕截图)。这显然只是一个概念证明;代码确实需要更多的工作。

(注意:当我尝试添加两个修改后的类时,我的答案变得很大。因此我在 GitHub 上 fork 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 上)

于 2015-12-18T23:43:23.957 回答