当前位置: 首页 > 知识库问答 >
问题:

使用JDatePicker只显示几个月和几年

莫兴言
2023-03-14

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

提前谢谢!

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

共有1个答案

锺星洲
2023-03-14

在看了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上)

 类似资料:
  • 在我的GEOJSON数据层中,我有一组大约20个区域。每个要素都有一个GeometryCollection,其中包含两个几何图形:一个用于定义区域的多边形和一个给出区域中心的点。 我希望多边形是不可见的,但是在地图上显示点作为标记。 此外,我希望能够根据缩放级别将区域标记设置为可见或不可见。 有没有可能只在地图上显示点,并将它们设置为可见/不可见的多边形?我知道我可以用正常的方式将它们添加到地图中

  • 问题内容: 有几个月使用的好方法吗?需要说明的是:该方法有两列,并返回两个日期之间经过的 天 数。我想在 几个月内得到 。我想在我的函数中有一个参数,可以告诉我检查过去20个月,36个月(无论几个月)中的数据。如果我只是做datediff并将结果除以30(或31),则结果不是很准确。我可以使用30.4166667(= 365天/ 12个月),但这在较短的时间内也不是很准确。那么,有关如何使用它的任

  • 问题内容: 如何在几天,几小时,几周或几个月后迭代一个时间跨度? 就像是: 其中foo是一个函数,返回一个迭代器。我一直在研究日历模块,但是它仅适用于特定的一年或一个月,不适用于日期之间。 问题答案: 使用dateutil及其rrule实现,如下所示: 输出为 将“每月”替换为“每年”,“每月”,“每周”,“每天”,“每小时”,“半年”或“第二”。替换dtstart,直到您想要的任何datetim

  • 题目 未来一段时间内(一年或者几年或者几个月,按月为最小单位),其中的每个月里,会出现几个星期几(一二三四五六七)? 场景 设置定时任务,周期为每个月4次,并且是每个月的固定前4个星期几去执行。 说明:每个月会有不固定个数的星期几是会出现五次的(1个或最多3个吧),所以需要提前一段时间预判一下未来的情况,也许有其他的场景也是类似。 也想过每7天执行一次,最多4次的方法,不过还是感觉有点不同的。 总

  • 我创建了新的SimpleDataFormat对象,它将给定字符串解析为日期对象。日期格式如下: 我将此日期设置为日历实例,如下所示: 现在我从这个日历中获取一周中的哪一天。它给出了错误的值。 它给出的输出是7,即周六,但预期值是5,即周四。有什么问题吗?

  • 问题内容: 我正在使用OpenID。我如何做到使用户即使关闭浏览器窗口也能长时间保持登录状态? 如何存储和访问用户的对象? 基本上,我想我只是不太了解会话如何在Java中工作。 问题答案: 因此,你实际上想要一个“在此计算机上记住我”选项吗?这实际上与OpenID部分无关。这是一种与语言无关的方式: 首先创建至少包含和列的数据库表。如有必要,还添加和。我猜这些列名不言而喻。 在第一次登录(如果必要