You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vaadin DatePicker的弹出窗口中仅显示年、月而不显示日?是否支持该功能?

实现Vaadin DatePicker仅展示年月选择

当然可以实现这个需求!根据你使用的Vaadin版本,有两种实用方案可选:

方案1:改造原生DatePicker(适用于Vaadin 14-23)

如果你的项目基于较早的Vaadin版本,没有专门的年月选择组件,可以通过配置DatePicker的展示规则和国际化设置来隐藏日期选项:

  1. 设置输入框的展示格式
    先指定DatePicker的显示格式,让输入框只呈现年月:

    DatePicker datePicker = new DatePicker();
    // 可根据需求调整格式,比如"MM/yyyy"或"yyyy年MM月"
    datePicker.setPresentationFormat("yyyy-MM");
    
  2. 自定义弹出窗口的国际化配置,隐藏日期面板
    通过设置DatePicker的I18n对象,移除日期选择相关的元素,只保留年月切换功能:

    DatePicker.DatePickerI18n i18n = new DatePicker.DatePickerI18n();
    // 清空日历相关的按钮文本,隐藏不必要的元素
    i18n.setCalendar("");
    i18n.setToday("");
    i18n.setCancel("");
    // 可按需自定义年月的显示文本
    i18n.setMonthNames(new String[]{"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"});
    i18n.setWeekdaysShort(new String[]{"日", "一", "二", "三", "四", "五", "六"});
    datePicker.setI18n(i18n);
    
  3. 限制可选值(可选)
    为了避免用户通过键盘输入具体日期,可添加值变更监听,强制选中当月第一天:

    datePicker.addValueChangeListener(event -> {
        if (event.getValue() != null) {
            LocalDate date = event.getValue();
            datePicker.setValue(date.withDayOfMonth(1));
        }
    });
    
  4. 补充CSS隐藏日期表格(可选)
    如果仍有日期选择面板残留,可通过CSS彻底隐藏:

    vaadin-date-picker-overlay::part(calendar) {
        display: none;
    }
    

方案2:使用官方MonthPicker组件(Vaadin 24+推荐)

从Vaadin 24开始,官方推出了MonthPicker组件,专门用于年月选择,默认就只展示年月选项,无需额外改造:

MonthPicker monthPicker = new MonthPicker();
// 设置展示格式
monthPicker.setPresentationFormat("yyyy-MM");
// 直接获取选中的年月(返回YearMonth类型)
monthPicker.addValueChangeListener(event -> {
    YearMonth selectedMonth = event.getValue();
    System.out.println("选中的年月:" + selectedMonth);
});

这个组件的弹出窗口原生就只有年月切换器,完全匹配你的需求,是最省心的方案。


内容的提问来源于stack exchange,提问作者Александр Хворостенко

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 14:48:11