2008-12-16 12 views
14

मैं एक JPanel JTextFields से भरा है मिलता है ...जावा JPanel अवयव

for (int i=0; i<maxPoints; i++) { 
    JTextField textField = new JTextField(); 
    points.add(textField); 
} 

कैसे मैं बाद में है कि JPanel में JTextFields मिलता है? अगर मैं साथ

TextField.getText(); 

धन्यवाद

+0

मैं कहना है मिल गया है, धन्यवाद "कोई भी" उन सेब लोगो और "THANKSSS" हस्ताक्षर दूर करने के लिए कहते हैं। –

उत्तर

11

खैर भालू मन में वे खुद उनके द्वारा वहां नहीं मिला

जवाब वहां तैनात में (मैं एक गतिशील कार्यावधि में इन पैनलों बनाने के बारे में कुछ सवाल पढ़ा लगता है), किसी ने कहा कि आप उन लोगों के लिए संदर्भ रखा जाना चाहिए एक सरणी में textfields।

List<JTextField> list = new ArrayLists<JTextField>(); 

// your code... 
for (int i=0; i<maxPoints; i++) { 
    JTextField textField = new JTextField(); 
    points.add(textField); 
    list.add(textField); // keep a reference to those fields. 
} 

// बाद

for(JTextField f : list) { 
    System.out.println(f.getText()) ; 
} 

नहीं है कि आसान था: यह वास्तव में आप यहाँ क्या जरूरत है?

बस इस तरह के कलाकृतियों (सूची) को यथासंभव निजी रखना याद रखें। वे केवल आपके नियंत्रण के लिए हैं, मुझे नहीं लगता कि वे इंटरफ़ेस से संबंधित हैं।

मान लीजिए कि आप ग्रंथों की सरणी प्राप्त करना चाहते हैं आप पर विचार करना चाहिए है,

public List<JTextField> getFields(); 

के बजाय:

public List<String> getTexts(); // get them from the textfields ... 
10

उनके मूल्यों चाहते हैं की तरह जावा में हर JPanel भी एक AWT कंटेनर है। इस प्रकार, आप पैनल में निहित घटकों की सरणी प्राप्त करने के लिए getComponents का उपयोग करने में सक्षम होना चाहिए, उन पर पुनरावृत्त करें, अपने प्रकारों की जांच करें (यह सुनिश्चित करने के लिए कि आपको अन्य नियंत्रण नहीं मिलते हैं), और जो कुछ भी आपको चाहिए उसके साथ करें।

हालांकि, यह आमतौर पर खराब डिज़ाइन होता है। यदि आप जानते हैं कि आपको विशिष्ट घटकों तक पहुंचने की आवश्यकता होगी, तो उन टेक्स्ट फ़ील्ड की सरणी को बनाए रखना और इसे पास करना बेहतर है, भले ही वे कंटेनर में दृष्टिहीन हों।

यदि यह एक आवर्ती कार्य है या एकाधिक बिंदुओं से किया जा सकता है, तो यह भी हो सकता है कि टेक्स्ट फ़ील्ड वाले पैनल का प्रतिनिधित्व करने वाला एक विशेष वर्ग हो, जो तब इन क्षेत्रों तक पहुंचने के अपने इंटरफ़ेस माध्यमों को प्रदान करेगा।

1
//una forma de recorer todos los elementos dentro de un jpanel 
    Component[] components = jPanelX.getComponents(); 

    for (int i = 0; i < components.length; i++) { 

     if(components[i].getClass().getName().toString().equals("javax.swing.JTextField")){ 
      components[i].setEnabled(false); 
     } 
    } 
+1

क्या इस घटक को इसके घोषित नाम से प्राप्त करना संभव है? मेरा मतलब है घटक का परिवर्तनीय नाम – Barrier

2

आप getComponents विधि इस की एक सरणी के साथ रिटर्न बुलाना चाहिए आपके जेपीनल पर सभी तत्व। आप सरणी पर फिर से शुरू कर सकते हैं और जांच कर सकते हैं कि यह घटक के बाद मांग के बराबर है या नहीं।

List<JTextField> list = new ArrayLists<JTextField>(); 
Component[] components = panel.getComponents(); 

for (Component component : components) { 
    if (component.getClass().equals(JTextField.class)) { 
     list.add((JTextField)component); 
    } 
} 
+0

क्या यह घटक इसके घोषित नाम के साथ प्राप्त करना संभव है? मेरा मतलब घटक का चर नाम है। – Barrier

0

आपकी समस्या थकाऊ कोड टेक्स्ट लिख रही है। क्यों सिर्फ यह नहीं पैदा करते हैं और कार्यक्रम में पेस्ट !! ...

for(int i=1 ; i<=maxpoints ;i++){ 
    System.out.println("JTextField tf"+i+" = new JTextField()"+";"); 
    System.out.println("points.add(tf"+i+")"+";"); 
} 

अपने कार्यक्रम में उपरोक्त कोड के उत्पादन में पेस्ट करें और आप कर रहे हैं। अब, आप एक समान तरीके से थकाऊ कोड पाठ उत्पन्न कर सकते हैं पाठ फ़ील्ड की सामग्री का उपयोग करने के लिए ....

for(int i=1 ; i<=maxpoints ;i++){ 
    System.out.println("String s"+i+" = JTextField tf"+i+".getText()"+";"); 
} 
1

यह है कि मैं क्या रिकर्सिवली कंटेनर के माध्यम से जाने के लिए और textfields कि पर हैं पाने के लिए किया था जेपीनल।

private void ClearAllFields(Container myContainer) { 

    Component myComps[] = myContainer.getComponents(); 

    for (int i=0; i<myComps.length; i++) { 
     if(myComps[i] instanceof JPanel) { 
      JPanel myPanel = (JPanel) myComps[i]; 
      ClearAllFields(myPanel); 
     } 
     if(myComps[i] instanceof JTextField) { 
     JTextField myTextField = (JTextField) myComps[i]; 
     myTextField.setText(""); 
     } 
    }   
} 

और फिर इसका इस्तेमाल करने के लिए, आप इसे इस तरह से

ClearAllFields([jdialog or jframe etc].getContentPane());