Java 如何实现JDatePicker

Java 如何实现JDatePicker,java,datepicker,Java,Datepicker,我正在使用JDatePicker的最新版本1.3.4。应该如何实施 我得到一个编译器错误:构造函数JDatePanelImpl(UtilDateModel)未定义。建议的修复方法是:添加参数以匹配JDatePanelImpl(DateModel,Properties)。什么应该作为properties参数传入 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.sql.*; import ja

我正在使用JDatePicker的最新版本1.3.4。应该如何实施

我得到一个编译器错误:构造函数JDatePanelImpl(UtilDateModel)未定义。建议的修复方法是:添加参数以匹配JDatePanelImpl(DateModel,Properties)。什么应该作为properties参数传入

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import java.util.Calendar;
import java.util.Date;
import org.jdatepicker.impl.*;
import org.jdatepicker.util.*;
import org.jdatepicker.*;

    //import org.jdatepicker.graphics.*;
class date2 {

    void GUI() {
        JFrame f1 = new JFrame();
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f1.setSize(300, 300);
        f1.setVisible(true);

        Container conn = f1.getContentPane();
        conn.setLayout(null);

        UtilDateModel model = new UtilDateModel();
        //model.setDate(20,04,2014);
        JDatePanelImpl datePanel = new JDatePanelImpl(model);
        JDatePickerImpl datePicker = new JDatePickerImpl(datePanel);
        f1.add(datePicker);

    }

}
…跑步者

class testDate2 {

    public void main(String[] args) {

        date2 d1 = new date2();
        d1.GUI();

    }

}

假设您使用的是1.3.4,则构造函数要求已更改

UtilDateModel model = new UtilDateModel();
//model.setDate(20,04,2014);
// Need this...
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);
// Don't know about the formatter, but there it is...
JDatePickerImpl datePicker = new JDatePickerImpl(datePanel, new DateLabelFormatter());

使用此
抽象格式化程序

public class DateLabelFormatter extends AbstractFormatter {

    private String datePattern = "yyyy-MM-dd";
    private SimpleDateFormat dateFormatter = new SimpleDateFormat(datePattern);

    @Override
    public Object stringToValue(String text) throws ParseException {
        return dateFormatter.parseObject(text);
    }

    @Override
    public String valueToString(Object value) throws ParseException {
        if (value != null) {
            Calendar cal = (Calendar) value;
            return dateFormatter.format(cal.getTime());
        }

        return "";
    }

}

只需在
JDatePanelImpl的构造函数中使用属性

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);

请参见-->
conn.setLayout(null)和查看更多详细信息我使用的是Jdatepicker 1.3.4,为了测试这一点,我使用了空布局。这是我们文凭级别的最后一个java项目。谢谢你的帮助。您还可以建议一种为JFrame/JPanel添加背景图像的方法吗?最好的方法是创建一个从JPanel扩展而来的自定义组件,重写其paintComponent方法并在那里绘制图像。搜索,有很多示例。还有一个
JDateComponentFactory
,它创建
JDatePickerImpl
JDatePanelImpl
对象,并且已经设置了模型和i18n属性。我现在还不清楚客户是否打算直接调用
JDatePanelImpl
构造函数,因为文档中没有关于如何构造它所使用的i18n
属性的很好的指导。@AndrewJanke是的,这仍然是一堆不需要的黑客行为。无论如何,我看不到在不强制转换的情况下为
JDatePanel
设置模型,您不应该强制转换它,因为这是工厂的重点,而且。。。我将使用
JXDatePicker
:P@NickGraham你知道,16年来我从来没有“不得不”包括
serialVersionUID
,但我不使用Eclipse,也不是序列化的倡导者,因为大多数问题都有更好的解决方案,但我已经做到了。顺便说一句,这实际上是一个很好的包装。我在很多应用程序中都使用了它。这些属性是java.util中的吗?