package org.esa.snap.rcp.util;
import org.esa.snap.core.datamodel.ProductData;
import org.jdesktop.swingx.table.DatePickerCellEditor;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import java.awt.BorderLayout;
import java.awt.Component;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
* @author Marco Peters
*/
public class DateTimePickerCellEditor extends DatePickerCellEditor {
public DateTimePickerCellEditor(DateFormat dateFormat, DateFormat timeFormat) {
super(null);
Date asDate = ProductData.UTC.create(new Date(), 0).getAsDate();
DateTimePicker dateTimePicker = new DateTimePicker(asDate, Locale.getDefault(), dateFormat, timeFormat);
//---- this duplicates the code in the parent constructor -------------
dateTimePicker.getEditor().setBorder(BorderFactory.createEmptyBorder(0, 1, 0, 1));
dateTimePicker.addActionListener(getPickerActionListener());
datePicker = dateTimePicker;
//---------------------------------------------------------------------
}
private DateTimePicker getEditor() {
return (DateTimePicker) datePicker;
}
public void setTimeFormat(DateFormat timeFormat) {
getEditor().setTimeFormat(timeFormat);
}
public DateFormat getTimeFormat() {
return getEditor().getTimeFormat();
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
ignoreAction = true;
Date valueAsDate = getValueAsDate(value);
getEditor().setDateTime(valueAsDate);
ignoreAction = false;
return datePicker;
}
public static void main(String[] args) {
Locale.setDefault(Locale.ENGLISH);
SwingUtilities.invokeLater(() -> {
DateFormat dateFormat = ProductData.UTC.createDateFormat("yyyy-MM-dd'T'HH:mm:ss");
DateFormat timeFormat = ProductData.UTC.createDateFormat("HH:mm:ss");
Calendar calendar = getCalendar();
Date[] date1 = {calendar.getTime()};
calendar.roll(Calendar.DATE, 1);
Date[] date2 = {(Date) calendar.getTime().clone()};
calendar.roll(Calendar.DATE, 1);
calendar.roll(Calendar.HOUR, 3);
Date[] date3 = {calendar.getTime()};
Date[] date4 = {null};
DefaultTableModel tableModel = new DefaultTableModel(0, 1);
tableModel.addRow(date1);
tableModel.addRow(date2);
tableModel.addRow(date3);
tableModel.addRow(date4);
JTable table = new JTable(tableModel);
DateTimePickerCellEditor timePickerCellEditor = new DateTimePickerCellEditor(dateFormat, timeFormat);
timePickerCellEditor.setClickCountToStart(1);
table.getColumnModel().getColumn(0).setPreferredWidth(250);
table.getColumnModel().getColumn(0).setCellEditor(timePickerCellEditor);
table.getColumnModel().getColumn(0).setCellRenderer(new DateCellRenderer(dateFormat));
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(table, BorderLayout.CENTER);
JFrame frame = new JFrame("Test DateTime Picker");
frame.setContentPane(panel);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
frame.pack();
frame.setVisible(true);
});
}
private static Calendar getCalendar() {
Calendar calendar = ProductData.UTC.createCalendar();
calendar.setTimeInMillis(new Date().getTime());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar;
}
}