【问题标题】:date and time picker in JAVA [closed]JAVA中的日期和时间选择器[关闭]
【发布时间】:2015-01-19 02:55:15
【问题描述】:

我正在寻找日期和时间选择器,但发现只是用于日期选择器且不支持时间的 JCalender

我也发现了这个 http://matrex.sourceforge.net/help/DateTimePickerDialog.html

我喜欢它,因为它简单易用,但我不知道如何获得它或在哪里可以找到它

【问题讨论】:

标签: java datetimepicker


【解决方案1】:

检查这个线程(使用 swingx JXDatePicker 组件,他扩展了它的功能)

Is there any good and free Date AND Time Picker available for Java Swing?

第二个答案有一个完整的例子

从这里下载 swingx:http://www.java2s.com/Code/Jar/s/Downloadswingxjar.htm

其他帖子中的示例:

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

【讨论】:

  • 谢谢你MihaiC,你能给我一个例子如何使用这个吗?
  • 第二个答案包含扩展组件的代码。我没有测试过这个。编辑答案以包含它。
  • 非常感谢 MihaiC,我确实使用了 jCalendar flib.sourceforge.net/JCalendar/doc/screenshots.html 它更容易,并且我在您的代码中修复了一些代码,但它可以 100% 工作
  • 很高兴听到它 :) 祝你的项目好运
  • 非常感谢 MihaiC,我还有很多问题,但我已经问过你很多了 :) 再次感谢
【解决方案2】:

LGoodDatePicker 库包含一个很好的 DateTimePicker 组件。该组件允许用户编辑日期和时间。可以使用可选的“微调器”样式按钮、默认的“时间列表”按钮或同时使用两者来编辑时间。

公平披露:我是主要开发者。

如果需要,也可以单独使用 DatePicker 和 TimePicker 类。
我已经粘贴了下面三个组件的屏幕截图(以及演示应用程序)。

该库可以从项目release page 安装到您的Java 项目中。

项目主页在 Github 上:
https://github.com/LGoodDatePicker/LGoodDatePicker

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-10
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2012-09-11
    • 1970-01-01
    相关资源
    最近更新 更多