2009-12-21 10 views
7

क्या पैनल का नाम प्राप्त करना संभव है जिसे जेएलएबल में जोड़ा गया है? मैंने कुछ जेएलएबल्स को विभिन्न जेपीनेल में जोड़ा, और मैं विभिन्न माउस इवेंट्स को कॉल करना चाहता हूं कि जेएलएबल्स किस पैनल पर रखा गया है।जेएलएबल - पैरेंट पैनल प्राप्त करें?

उत्तर

10

यदि आप label.getParent() चलाते हैं तो यह लेबल पैनल को अंदर वापस कर देगा।

फिर आप parent.getName() पर कॉल कर सकते हैं लेकिन तथ्य यह है कि अब आपके पास उस ऑब्जेक्ट की आवश्यकता होगी जिसके लिए आपको इसकी आवश्यकता नहीं हो सकती है।

3

सबसे आसान तरीका यह करने के लिए:

//label1 and label2 are JLabel's 
//panel1 and panel2 are JPanel's 
doActionsForLabel(label1); 
doActionsForLabel(label2); 

public void doActionsForLabel(JLabel label) 
{ 
    if (label.getParent() == panel1) 
    { 
     //do action #1 
    } 
    else if (label.getParent() == panel2) 
    { 
     //do action #2 
    } 
} 

ऊपर कोड मानता है कि लेबल JPanels के प्रत्यक्ष बच्चे हैं। हालांकि, यह हमेशा मामला नहीं हो सकता है, कभी-कभी वे पैनल के महान पोते या महान-पोते-पोते हैं। यदि ऐसा है, तो आप माता-पिता पदानुक्रम को पार करने के लिए कुछ और जटिल परिचालन करेंगे।

public void doActionsForLabel(JLabel label) 
{ 
    boolean flag = true; 
    Component parent = label; 
    while (flag) 
    { 
     parent = parent.getParent(); 
     if ((parent != null) && (parent instanceof JPanel)) 
     {    
      if (label.getParent() == panel1) 
      { 
       //do action #1 
      } 
      else if (label.getParent() == panel2) 
      { 
       //do action #2 
      }    
     } 
     else 
     { 
      flag = false; 
     } 
    } 
} 

गॉर्डन के रूप में सुझाव दिया है, अगर आप घटकों के समानता के लिए परीक्षण करने के लिए नहीं करना चाहते हैं, तो आप घटकों के गुणों की समानता के लिए परीक्षण कर सकते हैं:, label.getParent() == panel1 की

इसके बजाय इस या इसी तरह के बजाय करना : label.getParent().getName().equals("panel_1_name")

+0

धन्यवाद कि बहुत उपयोगी था :) – Kari

+0

आपका स्वागत है ... – bguiz

3

आप कितना गहरा नीचे अपने लेबल पदानुक्रम में है, वहाँ SwingUtilities में कुछ उपयोगी कार्यों है, उदाहरण के लिए पता नहीं है: SwingUtilities.getAncestorOfClass(Class, Component)

अपने लेबल में पैरेंट कंटेनर के नाम की जाँच करने के लिए एक विकल्प हो सकता है घटना को सीधे पैरेंट कंटेनर में अग्रेषित करने के लिए और माता-पिता को काम करने दें। आप जो हासिल करने की कोशिश कर रहे हैं उसके आधार पर, यह माता-पिता से लेबल को कम करने के लिए उपयोगी हो सकता है। अग्रेषण घटनाओं को Component. processEvent (AWTEvent) का उपयोग करके किया जा सकता है।

+0

और 'सार्वजनिक स्थैतिक कंटेनर प्राप्त करें पूर्वजों नामांकित (स्ट्रिंग नाम, घटक कंप)', अगर हम नाम जानते हैं। धन्यवाद! – FaithReaper

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