2012-12-25 17 views
5

क्या जावा में कई JTextfields को अन्यथा संरचना के बिना सत्यापित करने का कोई तरीका है। मेरे पास 13 फ़ील्ड का एक सेट है, मुझे एक त्रुटि संदेश चाहिए जब किसी भी 13 फ़ील्ड के लिए कोई प्रविष्टि नहीं दी जाती है और उस विशेष टेक्स्टबॉक्स पर फ़ोकस सेट करने में सक्षम हो। यह उपयोगकर्ताओं को डेटाबेस में खाली डेटा दर्ज करने से रोकने के लिए है। क्या कोई मुझे दिखा सकता है कि यह नीचे की तरह संरचना के बिना कैसे हासिल किया जा सकता है।एकाधिक JTextfield के लिए खाली स्ट्रिंग सत्यापन

if (firstName.equals("")) { 
    JOptionPane.showMessageDialog(null, "No data entered"); 
} else if (lastName.equals("")) { 
    JOptionPane.showMessageDialog(null, "No data entered"); 
} else if (emailAddress.equals("")) { 
    JOptionPane.showMessageDialog(null, "No data entered"); 
} else if (phone.equals("")) { 
    JOptionPane.showMessageDialog(null, "No data entered"); 
} else { 
//code to enter values into MySql database 

उपर्युक्त कोड एक्शनपेरेटेड विधि के तहत पंजीकरण पंजीकरण बटन में आता है। MySQL में फ़ील्ड सेट करने के बावजूद नल के रूप में, जावा जीयूआई से खाली स्ट्रिंग स्वीकार की जा रही थी। यह क्यों है? मैं उम्मीद कर रहा था कि शायद एक खाली स्ट्रिंग अपवाद फेंक दिया जा सकता है जिससे मैं एक सत्यापन संदेश को अनुकूलित कर सकता हूं लेकिन ऐसा करने में असमर्थ था क्योंकि खाली क्षेत्र स्वीकार किया जा रहा था।

public static boolean areAllNotEmpty(String... texts) 
{ 
    for(String s : texts) if(s == null || "".equals(s)) return false; 
    return true; 
} 

// ... 

if(areAllNotEmpty(firstName, lastName, emailAddress, phone)) 
{ 
    JOptionPane.showMessageDialog(null, "No data entered"); 
} 
+1

उपयोग 'DocumentListener', और' बदलने के लिए पृष्ठभूमि Color' बजाय 'JOptionPane' – mKorbel

उत्तर

2

यहाँ एक तरह से यह करने के लिए है गलत, मैं स्विंग या awt.HTH से परिचित नहीं हूँ :)

+0

' "" .equals (ओं) के उपयोग के 'हममम त्रिगुट – mKorbel

+0

@mKorbel क्या है तुम्हारा मतलब है? :) –

+0

'" ".equals (ओं)' उपयोगी हो सकता है, शून्य को अनदेखा किया जाना चाहिए – mKorbel

4

, इन तीन JTextField की एक सरणी ले लो मैं एक सिंहावलोकन

JTextField[] fields = new JTextField[13] 
field[0] = firstname; 
field[1] = lastname; //then add remaining textfields 

for(int i = 0; i < fields.size(); ++i) { 
if(fields[i].getText().isEmpty()) 
    JOptionPane.showMessageDialog(null, "No data entered"); 
} 

मुझे सही अगर मैं कर रहा हूँ दे रहा हूँ:

धन्यवाद

+0

आप सही हैं।:-) – vels4j

+0

@MuminAli निजी के साथ कुछ भी नहीं, क्या आप उस वर्ग के बाहर उपयोग कर रहे हैं? –

+0

फ़ील्ड = {पहला नाम, अंतिम नाम ...}; अभिव्यक्ति की अवैध शुरुआत है। पहले नाम के बाद से, अंतिम नाम Jtextfield [] प्रकार के नहीं हैं, स्विंग की आवश्यकता है। जेटेक्स्टफील्ड [], स्विंग JTextfield पाया। – Hoody

4

थाई करने के कई तरीके हैं रों, एक

JTextField[] txtFieldA = new JTextField[13] ; 
txtFieldFirstName.setName("First Name") ; //add name for all text fields 
txtFieldA[0] = txtFieldFirstName ; 
txtFieldA[1] = txtFieldLastName ; 
.... 

// in action event 
for(JTextField txtField : txtFieldA) { 
    if(txtField.getText().equals("")) { 
     JOptionPane.showMessageDialog(null, txtField.getName() +" is empty!"); 
     //break it to avoid multiple popups 
     break; 
    } 
} 

इसके अलावा, कृपया JGoodies Validation पर एक नज़र उस ढांचे आप घुमाओ अनुप्रयोगों में उपयोगकर्ता इनपुट को मान्य मदद करता है और मान्यता त्रुटियों और चेतावनियों की रिपोर्ट करने में सहायता करता है लेते हैं।

+1

+1 की अनुमति है धन्यवाद – kleopatra

+0

@kleopatra के लिए – vels4j

6

बस एक छोटी उंगली ट्विचिंग के लिए एक पुनः उपयोग करने योग्य सत्यापन सेटअप का प्रदर्शन करने के लिए जो कोर स्विंग में उपलब्ध सुविधाओं का उपयोग करता है।

सहयोगियों:

  • InputVerifier जो मान्यता तर्क होता है। यहां यह सत्यापित करने में फ़ील्ड में खाली टेक्स्ट की जांच कर रहा है। ध्यान दें कि
    • को सत्यापित दुष्प्रभाव नहीं होना चाहिए
    • shouldYieldFocus सीमित नहीं करने के लिए ध्यान केंद्रित ट्रेवर्सल
    • यह सभी टेक्स्ट फ़ील्ड
  • के लिए एक ही उदाहरण है ओवरराइड है एक कार्रवाई है कि सभी की वैधता की जाँच करता है प्रतिबद्ध अपने माता-पिता के बच्चों को स्पष्ट रूप से इनपुट वीरिफायर (यदि कोई हो) का आह्वान करके और कुछ भी नहीं करता है, तो कोई भी अमान्य है
  • इनपुट क्षेत्र के लेबल को ले जाने वाले आम तौर पर उपलब्ध त्रुटि संदेश

कुछ कोड के टुकड़े

// a reusable, shareable input verifier 
InputVerifier iv = new InputVerifier() { 

    @Override 
    public boolean verify(JComponent input) { 
     if (!(input instanceof JTextField)) return true; 
     return isValidText((JTextField) input); 
    } 

    protected boolean isValidText(JTextField field) { 
     return field.getText() != null && 
       !field.getText().trim().isEmpty(); 
    } 

    /** 
    * Implemented to unconditionally return true: focus traversal 
    * should never be restricted. 
    */ 
    @Override 
    public boolean shouldYieldFocus(JComponent input) { 
     return true; 
    } 

}; 
// using MigLayout for lazyness ;-) 
final JComponent form = new JPanel(new MigLayout("wrap 2", "[align right][]")); 
for (int i = 0; i < 5; i++) { 
    // instantiate the input fields with inputVerifier 
    JTextField field = new JTextField(20); 
    field.setInputVerifier(iv); 
    // set label per field 
    JLabel label = new JLabel("input " + i); 
    label.setLabelFor(field); 
    form.add(label); 
    form.add(field); 
} 

Action validateForm = new AbstractAction("Commit") { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     Component source = (Component) e.getSource(); 
     if (!validateInputs(source.getParent())) { 
      // some input invalid, do nothing 
      return; 
     } 
     System.out.println("all valid - do stuff"); 
    } 

    protected boolean validateInputs(Container form) { 
     for (int i = 0; i < form.getComponentCount(); i++) { 
      JComponent child = (JComponent) form.getComponent(i); 
      if (!isValid(child)) { 
       String text = getLabelText(child); 
       JOptionPane.showMessageDialog(form, "error at" + text); 
       child.requestFocusInWindow(); 
       return false; 
      } 
     } 
     return true; 
    } 
    /** 
    * Returns the text of the label which is associated with 
    * child. 
    */ 
    protected String getLabelText(JComponent child) { 
     JLabel labelFor = (JLabel) child.getClientProperty("labeledBy"); 
     return labelFor != null ? labelFor.getText() : ""; 
    } 

    private boolean isValid(JComponent child) { 
     if (child.getInputVerifier() != null) { 
      return child.getInputVerifier().verify(child); 
     } 
     return true; 
    } 
}; 
// just for fun: MigLayout handles sequence of buttons 
// automagically as per OS guidelines 
form.add(new JButton("Cancel"), "tag cancel, span, split 2"); 
form.add(new JButton(validateForm), "tag ok"); 
+0

@Reimeus InputVerifier एक बुरा विचार नहीं है - बस इसे फोकस प्रतिबंधित नहीं करें और इसे किसी घटक को सत्यापित करने के लिए नियम के रूप में उपयोग करें :-) – kleopatra

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