2009-03-17 13 views

Répondre

62

Pour un sélecteur de temps, vous pouvez utiliser un JSpinner et définir un JSpinner.DateEditor que seuls les spectacles la valeur de temps.

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 
+1

wow si simple et bon! Merci, vous êtes génial! – JavaNullPointer

+0

Vous pouvez également utiliser une bibliothèque telle que JDatePicker: http://jdatepicker.org conjointement pour sélectionner la date. – juanheyns

+4

La bibliothèque [LGoodDatePicker] (https://github.com/LGoodDatePicker/LGoodDatePicker) inclut un bon composant ** DateTimePicker **. (Ainsi que les classes individuelles DatePicker et TimePicker). Les trois composants sont simples et faciles à utiliser. Voici quelques captures d'écran des composants et de l'application de démonstration. [Capture d'écran 1] (http://i.stack.imgur.com/ghDdI.png), [Capture d'écran 2] (http://i.stack.imgur.com/QXgWE.png). La page d'accueil du projet se trouve à l'adresse https://github.com/LGoodDatePicker/LGoodDatePicker. – BlakeTNC

1

Comme vous l'avez dit Le sélecteur de date est facile, il y en a beaucoup. Comme pour un sélecteur de temps, vérifiez comment Google Agenda le fait lors de la création d'une nouvelle entrée. Il vous permet de taper quoi que ce soit tout en même temps il a une baisse en incréments de 30 minutes. Le menu déroulant change lorsque vous modifiez les minutes.

Si vous avez besoin pour permettre à l'utilisateur de choisir quelques secondes, le mieux que vous pouvez faire est un typable/déroulant combo

10

Utilisez les deux combinés .. c'est ce que je l'ai fait:

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

Vous pouvez étendre la composante SwingX de JXDatePicker:

« JXDatePicker ne gère que les dates sans temps Très souvent, nous devons laisser l'utilisateur choisir une date et une heure Ceci est un exemple de la façon d'utiliser.. JXDatePicker pour gérer la date et l'heure ensemble. "

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

EDIT: Cet article a disparu du web, mais comme SingleShot découvert, il est toujours disponible dans une archive Internet. Juste pour être sûr, voici l'exemple de travail complet:

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

Ce lien a maintenant disparu, mais [Wayback Machine] (http://archive.org/web/web.php) l'a [ici] (http://web.archive.org/web/20111118105909/http: //wiki.java.net/twiki/bin/view/Javadesktop/JXDateTimePicker?TWIKISID=cc05dea1611ad043796cd67ed476d711;skin=print). – SingleShot

+0

J'ai inclus maintenant ici le code complet de ce petit bijou :) – lbalazscs

+1

Y at-il éditeur de cellules, pour le mettre à la cellule de la table? – whatswrong