2009-03-17 7 views

Antwort

62

Für eine Zeitauswahl Sie eine JSpinner verwenden können und legen Sie einen JSpinner.DateEditor dass nur Shows der Zeitwert.

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 so einfach und gut! Danke, dass du großartig bist! – JavaNullPointer

+0

Sie können auch eine Bibliothek wie JDatePicker: http://jdatepicker.org in Verbindung verwenden, um das Datum auszuwählen. – juanheyns

+4

Die Bibliothek [LGoodDatePicker] (https://github.com/LGoodDatePicker/LGoodDatePicker) enthält eine gute ** DateTimePicker-Komponente **. (Sowie die einzelnen DatePicker und TimePicker Klassen). Die drei Komponenten sind einfach und benutzerfreundlich. Hier sind einige Screenshots der Komponenten und der Demo-Anwendung. [Screenshot 1] (http://i.stack.imgur.com/ghDdI.png), [Screenshot 2] (http://i.stack.imgur.com/QXgWE.png). Die Projekthomepage befindet sich unter https://github.com/LGoodDatePicker/LGoodDatePicker. – BlakeTNC

1

Wie Sie gesagt haben Date Picker ist einfach, es gibt viele da draußen.

Wie für eine Zeitauswahl, sehen Sie sich an, wie Google Calder das tut, wenn Sie einen neuen Eintrag erstellen. Es ermöglicht Ihnen, alles einzugeben, während gleichzeitig ein Dropdown in 30-Minuten-Schritten angezeigt wird. Das Dropdown-Menü ändert sich, wenn Sie die Minuten ändern.

Wenn Sie dem Benutzer erlauben, müssen Sekunden zu holen, dann ist das Beste, was Sie tun können, ist ein typisierbaren/Drop-Down-Combo

10

Verwenden Sie die beide kombiniert .. das ist, was ich tat:

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

Sie können die SwingX JXDatePicker Komponente erweitern:

„JXDatePicker nur Daten ohne Zeit behandelt Oft wir ein Datum der Benutzer wählen, und eine Zeit zu lassen, brauchen Dies ist ein Beispiel dafür, wie die Verwendung zu machen.. JXDatePicker um Datum und Uhrzeit gemeinsam zu behandeln. "

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

EDIT: Dieser Artikel aus dem Netz verschwunden, aber als Singleshot entdeckte, ist es nach wie vor in einem Internet-Archiv zur Verfügung. Nur um sicher zu sein, hier ist das vollständige Arbeitsbeispiel:

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

Dieser Link ist jetzt weg, aber die [Wayback Machine] (http://archive.org/web/web.php) hat es [hier] (http://web.archive.org/web/20111118105909/http: //wiki.java.net/twiki/bin/view/Javadesktop/JXDateTimePicker?TWIKISID=cc05dea1611ad043796cd67ed476d711;skin=print). – SingleShot

+0

Ich habe jetzt hier den vollständigen Code dieses kleinen Juwels eingefügt :) – lbalazscs

+1

Gibt es Zelleditor, um es in die Tabellenzelle zu setzen? – whatswrong