2012-11-24 16 views
6

में सभी फ़ील्ड मान्य करें मेरे पास एक प्रश्न है। मैंने एक स्विंग जीयूआई फॉर्म बनाया। इस फ़ॉर्म में JTextFields, JComboBox घटक शामिल हैं।स्विंग जीयूआई

अब मैं क्या करना चाहता हूं, जब दबाते हुए उपयोगकर्ता बटन पूरा करता हूं, तो मैं JTextFields और JComboBox घटक को सत्यापित करना चाहता हूं। मैं सभी JTextFields और JComboBoxes के लिए एक और सामान्य विधि के लिए सामान्य विधि लिखना चाहता हूं। क्या किसी को वैध एपीआई के बारे में पता है?

मुझे सभी क्षेत्रों को एक-एक करके मान्य करने की आवश्यकता नहीं है।

+0

आप क्या अर्थ है, क्या सत्यापन (। कंटेनर में, मूल्य से, e.i. ???) – mKorbel

+0

आप कॉमन्स उपकरण की कोशिश की? –

+0

आप [JGoodes बाइंडिंग्स] पर एक नज़र डाल सकते हैं (http://www.jgoodies.com/freeware/libraries/binding/) – MadProgrammer

उत्तर

5

"सत्यापन" का अर्थ है, तो "सभी क्षेत्रों जाँच" ... तो, हाँ - अपने "मान्यकरण" दिनचर्या सभी क्षेत्रों की जाँच करेगा एक-एक करके :)

तुम भी "मान्य के रूप में कर सकते हैं -तुम जाओ"। वहाँ सहित कई मायनों यह पूरा करने के हैं,:

+0

मुझे लगता है कि केनई सत्यापन API उपयोगी है। सबको धन्यवाद। – mtchinthaka

0

यह संभव नहीं है। इसके बजाय आपको एक नई कक्षा बनाना होगा जो JTextField को प्राप्त करे और उसके बाद validate() फ़ंक्शन private या protected के रूप में कार्य करें, और प्रत्येक बार जब आप getText() (जिसका अर्थ है कि आपको @Override इसे) करना होगा।

Container.getComponent() का उपयोग करने के लिए वैकल्पिक है और instanceof के लिए जांचें और फिर प्रत्येक फ़ील्ड को अलग से सत्यापित करें। हालांकि यह आप जो मांग रहे हैं उसके खिलाफ है।

1

वहाँ किसी तीसरे पक्ष एपीआई उपलब्ध हैं। आप

  1. आवश्यक क्षेत्र के लिए अपनी खुद विकसित कर सकते हैं,
  2. ईमेल सत्यापन,
  3. मैक्स & न्यूनतम लंबाई, आदि,

यहाँ के लिए Building a Swing Validation Package with InputVerifier

+1

यह 'JTable' संबंधित [उदाहरण] (http://stackoverflow.com/a/13510756/230513) भी देखें। – trashgod

6

एक एक नमूना ट्यूटोरियल है यहां विकल्प स्विंग के InputVerifier का उपयोग प्रत्येक JComboBox &के लिए इनपुट मान्य करने के लिए करेगाइस्तेमाल किया गया। आप घटकों के बीच आम प्रमाणक साझा कर सकता:

public class MyNumericVerifier extends InputVerifier { 
     @Override 
     public boolean verify(JComponent input) { 
      String text = null; 

      if (input instanceof JTextField) { 
      text = ((JTextField) input).getText(); 
      } else if (input instanceof JComboBox) { 
      text = ((JComboBox) input).getSelectedItem().toString(); 
      } 

      try { 
       Integer.parseInt(text); 
      } catch (NumberFormatException e) { 
       return false; 
      } 

      return true; 
     } 

     @Override 
     public boolean shouldYieldFocus(JComponent input) { 
      boolean valid = verify(input); 
      if (!valid) { 
       JOptionPane.showMessageDialog(null, "Invalid data"); 
      } 

      return valid; 
     } 
    } 

InputVerifier verifier = new MyNumericVerifier() 
comboBox.setInputVerifier(verifier); 
+0

+1 आप [example] (http://stackoverflow.com/a/13510756/230513) के लिए 'mustYieldFocus()' में फीडबैक प्रदान कर सकते हैं। – trashgod