JAVA中的日期和时间选择器
我正在寻找日期和时间选择器,但只找到了用于日期选择器且不支持时间的JCalender 我也发现了这个 我喜欢它,因为它简单易用,但我不知道如何获得它,也不知道在哪里可以找到它检查这个线程(使用swingxJAVA中的日期和时间选择器,java,datetimepicker,Java,Datetimepicker,我正在寻找日期和时间选择器,但只找到了用于日期选择器且不支持时间的JCalender 我也发现了这个 我喜欢它,因为它简单易用,但我不知道如何获得它,也不知道在哪里可以找到它检查这个线程(使用swingxJXDatePicker组件,他扩展了它的功能) 第二个答案有一个完整的例子 从此处下载swingx: 另一个职位的例子: import org.jdesktop.swingx.calendar.SingleDaySelectionModel; import org.jdesktop.swi
JXDatePicker
组件,他扩展了它的功能)
第二个答案有一个完整的例子
从此处下载swingx:
另一个职位的例子:
import org.jdesktop.swingx.calendar.SingleDaySelectionModel;
import org.jdesktop.swingx.JXDatePicker;
import javax.swing.*;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.DateFormatter;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.*;
import java.awt.*;
public class DateTimePicker extends JXDatePicker {
private JSpinner timeSpinner;
private JPanel timePanel;
private DateFormat timeFormat;
public DateTimePicker() {
super();
getMonthView().setSelectionModel(new SingleDaySelectionModel());
}
public DateTimePicker( Date d ) {
this();
setDate(d);
}
public void commitEdit() throws ParseException {
commitTime();
super.commitEdit();
}
public void cancelEdit() {
super.cancelEdit();
setTimeSpinners();
}
@Override
public JPanel getLinkPanel() {
super.getLinkPanel();
if( timePanel == null ) {
timePanel = createTimePanel();
}
setTimeSpinners();
return timePanel;
}
private JPanel createTimePanel() {
JPanel newPanel = new JPanel();
newPanel.setLayout(new FlowLayout());
//newPanel.add(panelOriginal);
SpinnerDateModel dateModel = new SpinnerDateModel();
timeSpinner = new JSpinner(dateModel);
if( timeFormat == null ) timeFormat = DateFormat.getTimeInstance( DateFormat.SHORT );
updateTextFieldFormat();
newPanel.add(new JLabel( "Time:" ) );
newPanel.add(timeSpinner);
newPanel.setBackground(Color.WHITE);
return newPanel;
}
private void updateTextFieldFormat() {
if( timeSpinner == null ) return;
JFormattedTextField tf = ((JSpinner.DefaultEditor) timeSpinner.getEditor()).getTextField();
DefaultFormatterFactory factory = (DefaultFormatterFactory) tf.getFormatterFactory();
DateFormatter formatter = (DateFormatter) factory.getDefaultFormatter();
// Change the date format to only show the hours
formatter.setFormat( timeFormat );
}
private void commitTime() {
Date date = getDate();
if (date != null) {
Date time = (Date) timeSpinner.getValue();
GregorianCalendar timeCalendar = new GregorianCalendar();
timeCalendar.setTime( time );
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, timeCalendar.get( Calendar.HOUR_OF_DAY ) );
calendar.set(Calendar.MINUTE, timeCalendar.get( Calendar.MINUTE ) );
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date newDate = calendar.getTime();
setDate(newDate);
}
}
private void setTimeSpinners() {
Date date = getDate();
if (date != null) {
timeSpinner.setValue( date );
}
}
public DateFormat getTimeFormat() {
return timeFormat;
}
public void setTimeFormat(DateFormat timeFormat) {
this.timeFormat = timeFormat;
updateTextFieldFormat();
}
public static void main(String[] args) {
Date date = new Date();
JFrame frame = new JFrame();
frame.setTitle("Date Time Picker");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DateTimePicker dateTimePicker = new DateTimePicker();
dateTimePicker.setFormats( DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.MEDIUM ) );
dateTimePicker.setTimeFormat( DateFormat.getTimeInstance( DateFormat.MEDIUM ) );
dateTimePicker.setDate(date);
frame.getContentPane().add(dateTimePicker);
frame.pack();
frame.setVisible(true);
}
}
该库包括一个良好的日期时间选择器组件。此组件允许用户编辑日期和时间。可以使用可选的“微调器”样式按钮、默认的“时间列表”按钮或两者都可以编辑时间
公平披露:我是主要开发者
如果需要,DatePicker和TimePicker类也可以单独使用。我已经粘贴了下面三个组件(以及演示应用程序)的屏幕截图 该库可以从项目中安装到Java项目中 项目主页位于Github上:
检查此线程第二个答案有一个完整的示例我还发现DateTimePickerDialog很有趣,所以我搜索了它的实现。在这里:谢谢你,MihaiC,你能给我一个如何使用它的例子吗?第二个答案有扩展组件的代码。我还没有测试过这个。编辑答案以包含它。非常感谢MihaiC,我确实使用了jCalendar。这更简单,我在你的代码中修复了一些代码,但它工作100%很高兴听到:)祝你的项目好运谢谢你这么多MihaiC,我还有很多问题,但我已经问了你很多:)再次感谢