Bạn có thể mở rộng thành phần JXDatePicker swingx:
"JXDatePicker chỉ xử lý ngày mà không cần thời gian Khá thường xuyên chúng ta cần phải cho phép người dùng chọn một ngày và trong một thời gian Đây là một ví dụ về cách sử dụng.. JXDatePicker để xử lý ngày giờ với nhau. "
http://wiki.java.net/twiki/bin/view/Javadesktop/JXDateTimePicker
EDIT: Bài viết này biến mất khỏi trang web, nhưng như SingleShot phát hiện, nó vẫn còn có sẵn trong một kho lưu trữ internet. Để chắc chắn, đây là ví dụ hoạt động đầy đủ:
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.*;
/**
* This is licensed under LGPL. License can be found here: http://www.gnu.org/licenses/lgpl-3.0.txt
*
* This is provided as is. If you have questions please direct them to charlie.hubbard at gmail dot you know what.
*/
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);
}
}
wow thật đơn giản và tốt! Cảm ơn bạn là tuyệt vời! – JavaNullPointer
Bạn cũng có thể muốn sử dụng một thư viện như JDatePicker: http://jdatepicker.org kết hợp để chọn ngày. – juanheyns
Thư viện [LGoodDatePicker] (https://github.com/LGoodDatePicker/LGoodDatePicker) bao gồm thành phần ** DateTimePicker tốt **. (Cũng như các lớp DatePicker và TimePicker riêng lẻ). Ba thành phần đơn giản và dễ sử dụng. Dưới đây là một số ảnh chụp màn hình của các thành phần và ứng dụng demo. [Ảnh chụp màn hình 1] (http://i.stack.imgur.com/ghDdI.png), [Ảnh chụp màn hình 2] (http://i.stack.imgur.com/QXgWE.png). Trang chủ dự án được đặt tại https://github.com/LGoodDatePicker/LGoodDatePicker. – BlakeTNC