在查看
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);
}
}