有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用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());

提前谢谢

注:这是我的意思的图像

enter image description here


共 (1) 个答案

  1. # 1 楼答案

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

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

    Screenshot of possible month/year picker

    编辑:添加了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 (on GitHub)

    CustomDatePicker类:CustomDatePicker.java (on GitHub)