¿Hay algún Selector de fecha y hora bueno y gratuito disponible para Java Swing?

¿Hay algún Selector de fecha y hora bueno y gratuito disponible para Java Swing?

Hay muchos recolectores de fechas disponibles, pero no hay fecha y tiempo seleccionado. Esto es lo más parecido que he encontrado hasta ahora: buscando un selector de fecha y hora

¿Nadie?

Para un selector de tiempo, puede usar un JSpinner y establecer un JSpinner.DateEditor que solo muestra el valor del tiempo.

JSpinner timeSpinner = new JSpinner( new SpinnerDateModel() ); JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(timeSpinner, "HH:mm:ss"); timeSpinner.setEditor(timeEditor); timeSpinner.setValue(new Date()); // will only show the current time 

Puede extender el componente swingx JXDatePicker:

“JXDatePicker solo maneja las fechas sin tiempo. Muy a menudo necesitamos permitirle al usuario elegir una fecha y una hora. Este es un ejemplo de cómo usar JXDatePicker para manejar la fecha y la hora juntas”.

http://wiki.java.net/twiki/bin/view/Javadesktop/JXDateTimePicker

EDITAR: Este artículo desapareció de la web, pero como SingleShot descubrió, todavía está disponible en un archivo de Internet. Solo para estar seguro, aquí está el ejemplo completo de trabajo:

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

Usa los dos combinados … eso es lo que hice:

 public static JPanel buildDatePanel(String label, Date value) { JPanel datePanel = new JPanel(); JDateChooser dateChooser = new JDateChooser(); if (value != null) { dateChooser.setDate(value); } for (Component comp : dateChooser.getComponents()) { if (comp instanceof JTextField) { ((JTextField) comp).setColumns(50); ((JTextField) comp).setEditable(false); } } datePanel.add(dateChooser); SpinnerModel model = new SpinnerDateModel(); JSpinner timeSpinner = new JSpinner(model); JComponent editor = new JSpinner.DateEditor(timeSpinner, "HH:mm:ss"); timeSpinner.setEditor(editor); if(value != null) { timeSpinner.setValue(value); } datePanel.add(timeSpinner); return datePanel; } 

Existe el componente FLib-JCalendar con un selector combinado de fecha y hora.

Como dijo, el selector de fecha es fácil, hay muchos por ahí.

En cuanto a un selector de tiempo, consulte cómo lo hace Google Calendar al crear una nueva entrada. Le permite escribir cualquier cosa mientras que al mismo tiempo tiene un menú desplegable en incrementos de 30 minutos. El menú desplegable cambia cuando cambia los minutos.

Si necesita permitir que el usuario seleccione segundos, lo mejor que puede hacer es un combo tipable / desplegable

Lo mejor de lo mejor, JCalendar: http://www.toedter.com/en/jcalendar/index.html Licencia LGPL.