में 24 घंटों का समय सख्त मैं एक जेएफओर्मेटेड टेक्स्टफिल्ड बनाने की कोशिश कर रहा हूं जो केवल 24 घंटे का समय स्वीकार करता है।JFormattedTextField
मैं एक समाधान के बहुत करीब हूं, लेकिन एक ऐसा मामला है जहां निम्न कोड उदाहरण काम नहीं करता है।
यदि आप समय "222" दर्ज करते हैं और फ़ील्ड से फ़ोकस बदलते हैं, तो समय "2202" में सही होता है। मैं इसे केवल 4 घंटे के पूर्ण 4 अंकों को स्वीकार करना चाहता हूं। यह कोड काम करता है जैसा कि मैं लगभग सभी मामलों में चाहता हूं, सिवाय इसके कि मैंने अभी उल्लेख किया है। कोई सुझाव?
public static void main(String[] args) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat("HHmm");
dateFormat.setLenient(false);
DateFormatter dateFormatter = new DateFormatter(dateFormat);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFormattedTextField textField = new JFormattedTextField(dateFormatter);
frame.add(textField, BorderLayout.NORTH);
frame.add(new JTextField("This is here so you can change focus."), BorderLayout.SOUTH);
frame.setSize(250, 100);
frame.setVisible(true);
}
आसान तरीके को 'JTextField' का प्रयोग होता है, और' का उपयोग कर DocumentFilter' :-) [DocumentFilter] (के लिए: http:/मेरी प्राथमिकता दी दृष्टिकोण
SimpleDateFormat
उपवर्गीकरण एक ही स्थान पर सभी पार्स तर्क रखने के लिए किया जाएगा /docs.oracle.com/javase/7/docs/api/javax/swing/text/DocumentFilter.html) आप इसे देख सकते हैं [उदाहरण] (http://stackoverflow.com/questions/9477354/how-to-allow -इंटरोडिंग-केवल-अंक-इन-जेटेक्स्टफील्ड/9478124 # 9478124) –सत्य नहीं है, 02:22 या 22:02 – mKorbel
हो सकता है यदि आप SimpleDateFormat का उपयोग कर रहे हैं तो आप भाग्य से बाहर हो सकते हैं। जावाडोक से: "पार्सिंग के लिए, पैटर्न अक्षरों की संख्या को अनदेखा किया जाता है जब तक कि दो आसन्न क्षेत्रों को अलग करने की आवश्यकता न हो।" यह पहले दो अंकों को घंटे के क्षेत्र के रूप में पार करता है, इसलिए यह जानता है कि शेष अंक मिनट फ़ील्ड होना चाहिए। – Alex