2009-03-17 9 views
52

क्या जावा स्विंग के लिए कोई अच्छी और निःशुल्क तिथि और समय पिकर उपलब्ध है?क्या जावा स्विंग के लिए कोई अच्छी और निःशुल्क तिथि और समय पिकर उपलब्ध है?

बहुत सारे डेट पिकर उपलब्ध हैं लेकिन कोई तारीख और समय पिकर नहीं है। यह अब तक का सबसे नज़दीक आया है: Looking for a date AND time picker

कोई भी?

उत्तर

62

एक समय पिकर आप एक JSpinner का उपयोग करें और सेट कर सकते हैं एक JSpinner.DateEditor के लिए यह है कि केवल शो समय मूल्य

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

वाह इतना आसान और अच्छा है! धन्यवाद आप महान हैं! – JavaNullPointer

+0

आप दिनांक चुनने के लिए जेडीएटीपीकर: http://jdatepicker.org जैसी लाइब्रेरी का भी उपयोग करना चाह सकते हैं। – juanheyns

+4

[LGoodDatePicker] (https://github.com/LGoodDatePicker/LGoodDatePicker) लाइब्रेरी में एक अच्छा ** DateTimePicker घटक ** शामिल है। (साथ ही साथ व्यक्तिगत डेटपिकर और टाइमपीकर कक्षाएं)। तीन घटक सरल और उपयोग करने में आसान हैं। यहां घटक और डेमो एप्लिकेशन के कुछ स्क्रीनशॉट दिए गए हैं। [स्क्रीनशॉट 1] (http://i.stack.imgur.com/ghDdI.png), [स्क्रीनशॉट 2] (http://i.stack.imgur.com/QXgWE.png)। प्रोजेक्ट होम पेज https://github.com/LGoodDatePicker/LGoodDatePicker पर स्थित है। – BlakeTNC

1

जैसा कि आपने कहा था कि दिनांक पिकर आसान है, वहां बहुत से लोग हैं।

एक समय पिकर के लिए, यह जांचें कि नई प्रविष्टि बनाते समय Google कैलेंडर कैसे करता है। यह आपको कुछ भी टाइप करने की अनुमति देता है जबकि एक ही समय में 30 मिनट की वृद्धि में गिरावट आती है। जब आप मिनट बदलते हैं तो ड्रॉप डाउन बदल जाता है।

आप उपयोगकर्ता सेकंड लेने के लिए अनुमति देने के लिए की जरूरत है, तो सबसे अच्छा तुम कर सकते हो एक typable/ड्रॉप डाउन कॉम्बो

-1

सर्वश्रेष्ठ में से सबसे अच्छा, JCalendar: http://www.toedter.com/en/jcalendar/index.html LGPL लाइसेंस प्राप्त है।

+4

-100 jcalendar से toedter में कोई टाइमपिकर नहीं है। – bobndrew

10

का प्रयोग दोनों संयुक्त .. कि मैं क्या किया है:

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

आप swingx JXDatePicker घटक का विस्तार कर सकते हैं:

"JXDatePicker केवल समय बिना दिनांकों संभालती अक्सर हम उपयोगकर्ता एक दिनांक और समय चुनें होने देना होता है यह कैसे उपयोग करने के लिए का एक उदाहरण है।। JXDatePicker एक साथ तारीख और समय को संभालने के लिए। "

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

संपादित करें: यह लेख वेब से गायब हो गया, लेकिन जैसा कि SingleShot की खोज की, यह अभी भी एक इंटरनेट संग्रह में उपलब्ध है। बस सुनिश्चित करने के लिए, यहां पूर्ण कार्य उदाहरण है:

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

यह लिंक अब चला गया है, हालांकि [वेबैक मशीन] (http://archive.org/web/web.php) में यह है [यहां] (http://web.archive.org/web/20111118105909/http: //wiki.java.net/twiki/bin/view/Javadesktop/JXDateTimePicker?TWIKISID=cc05dea1611ad043796cd67ed476d711;skin=print)। – SingleShot

+0

अब मुझे इस छोटे मणि का पूरा कोड शामिल किया गया है :) – lbalazscs

+1

क्या सेल संपादक है, इसे टेबल सेल पर रखने के लिए? – whatswrong

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^