2008-10-22 16 views
20

java.awt.Component.getName() क्या है? नेटबीन के साथ बनाए गए अनुप्रयोगों में यह हमेशा null लगता है। मैं इसमें प्रति घटक कुछ मदद पाठ संग्रहीत करने के बारे में सोच रहा हूं - मैं टूलटिप का उपयोग नहीं करना चाहता, मेरे पास एक और पैनल है जहां मैं सहायता टेक्स्ट दिखाऊंगा।java.awt.Component.getName() और setName() के लिए क्या उपयोग किया जाता है?

उत्तर

20

घटक.सेटनाम (..) जेडीके में अधिकतर रूप से देखने और महसूस करने के लिए कार्यान्वयन कक्षाओं को प्रत्येक घटक के लिए आईडी-जैसे स्ट्रिंग सेट करने के लिए उपयोग किया जाता है, उदाहरण के लिए BasicOptionPaneUI इसे अपना नाम "OptionPane.button" पर सेट करने के लिए बटन घटक पर कॉल कर सकता है।

getNring() विधियों में एक समग्र/मूल घटक के अंदर और एडब्ल्यूटी और स्विंग डीबग लॉगिंग कोड के अंदर बाल घटकों के नाम सेट करते समय getNring() विधियों में उपयोग किया जाता है। मुझे दृढ़ता से संदेह है कि getName() विधि का उपयोग कुछ एडब्ल्यूटी/स्विंग परीक्षण ढांचे द्वारा भी किया जाता है।

इसलिए यदि आप getName() के उपर्युक्त उपयोगों पर निर्भर नहीं हैं, तो आप इसे अपने सहायता संदेशों के लिए उपयोग करने का प्रयास कर सकते हैं, हालांकि मैं इसकी अनुशंसा नहीं करता।

शायद आपको अपने डिज़ाइन पर पुनर्विचार करना चाहिए? एक हैशपैप में कुछ लुकअप करने के लिए नाम का उपयोग करें जो संसाधन बंडल से सहायता टेक्स्ट लोड करता है?

+0

धन्यवाद हरमन - मैंने यह कैसे किया इसके लिए नीचे मेरा जवाब देखें। – JohnnyLambada

6

मैंने इसे ढांचे द्वारा किसी भी चीज़ के लिए उपयोग नहीं किया है। यह उपयोगी है यदि आपके पास एक विधि में घटकों को पारित किया जा रहा है ताकि आप उनका नाम पूछ सकें कि उन्हें कैसे संभाला जाए। साथ ही, कई UI परीक्षण ढांचे का उपयोग परीक्षण स्क्रिप्ट में नाम से घटकों को संदर्भित करने के लिए करने के लिए किया जाता है। मुझे कोई कारण नहीं दिख रहा है जिसका उपयोग आप सहायता पाठ के लिए नहीं कर सकते हैं।

+3

हम रोबोट/यूआई परीक्षण के लिए इसका इस्तेमाल करते हैं है। –

+1

हम इसे रोबोट/यूआई परीक्षण के लिए भी उपयोग करते हैं। – Jason

0

इसके अलावा, मुझे लगता है कि java.awt.Component एक्स में एक हेवीवेट ऑब्जेक्ट है, xwininfo और xwd जैसे प्रोग्राम आपको नाम से निर्दिष्ट करने की अनुमति दे सकते हैं।

मैंने अभी इसे एक जेएफआरएएम के साथ करने की कोशिश की है, और सेटनाम ने विंडो का नाम सेट नहीं किया है, विंडो को कन्स्ट्रक्टर में पारित स्ट्रिंग द्वारा नामित किया गया था। लेकिन मेरे पास परीक्षण करने के लिए कोई भी एकमात्र उदाहरण कोड नहीं है, इसलिए मैंने ऊपर जो लिखा है उसके बारे में गलत हो सकता है।

1

हरमन लिंटवेल्ट का जवाब मेरे ऐप के लिए सही है।

मैंने HelpText.properties नामक एक संसाधन बंडल बनाया है। इसमें नाम = मूल्य जोड़े हैं। मैं नाम = मूल्य जोड़ी से "नाम" के साथ अपने प्रत्येक घटक को सेटनाम() डी सेट करता हूं। मैंने फिर सभी माउस आंदोलनों को कैप्चर करने के लिए फ्रेम के getGlassPane() का उपयोग किया। जब कोई माउस किसी नामित घटक पर चलता है, तो यह बंडल में नाम देखता है, उपलब्ध होने पर सहायता प्रदर्शित करता है और माउस घटक को वास्तविक घटक के साथ आगे बढ़ाता है।

  • ग्लास फलक का उपयोग करने के लिए here देखें।
  • जनवरी न्यूमार्च का web page on using resource bundles बहुत उपयोगी था।
  • केविन रिफ की response ने मुझे यह बताया कि मेरा संसाधन बंडल कैसे ढूंढें।

व्हील। चारों ओर डूबने के केवल 2 दिन लायक है। मैं अंत में जावा में उपयोग करना शुरू कर रहा हूं :)

+0

खुशी है कि मैं मदद कर सकता हूं। जावा का आनंद लें –

2

component.getName() विधि ज्यादातर श्रोताओं के साथ उपयोग की जाती है। यदि आप किसी घटक का नाम सेट करते हैं (component.setName(name)) तो आप उस विशिष्ट घटक को Listener की विधि से कॉल कर सकते हैं।

उदाहरण:

public void someMethodOfsomeListener(SomeEvent e){ 
    if (e.getComponent().getName().equals(component.getName()) 
     //do stuff... 
} 

बारे में पता स्पष्ट रूप से घटक के नाम सेट करने के लिए है कि आप हो सकता है, अन्यथा यह null वापस आ जाएगी।

+0

यदि आपके पास श्रोता में 'घटक' संदर्भ है तो आप 'e.getComponent() == घटक' का भी उपयोग कर सकते हैं जो कम त्रुटि-प्रवण है। मैं भी कई श्रोताओं का उपयोग करने पर विचार करेंगे। – palacsint

+0

अवयवों का भी वही नाम हो सकता है। घटक समानता के लिए उपर्युक्त परीक्षण को भ्रमित न करें। – Jason

0

मैं श्रोताओं को एक ही कक्षा में अलग करने के लिए इसका उपयोग करता हूं। मुझे एक पैरामीटर के रूप में प्राप्त होता है जिसमें मेरा ऑब्जेक्ट होता है। एडलिस्टर कंटेनर के रूप में नहीं बल्कि उस ऑब्जेक्ट वाले वर्ग के रूप में। पहले नाम सेट करने की नोक के लिए धन्यवाद विवाविनाइल। यह उपयोगी और काम किया गया था।

0

यह है कि मैं क्या getName (का उपयोग करें) के लिए:

Frame[] frames = JFrame.getFrames(); 

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

     //get the frame 
     Frame frame = frames[i]; 

     if (frame.getName().equals(frameName)) { 

      //make the frame visible 
      frame.setVisible(true); 

      //focus the frame 
      frame.requestFocus(); 

      //found 
      return; 

     } 

    } 
2

FEST testcases में यह पहचान करने के लिए एक घटक के नाम का उपयोग करता है।

-1

मैं नाम प्राप्त करने के लिए कई जवाब खोज की है और मुझे लगता है कि यह केवल आसान समाधान

public static void main(String[] args) { 
    ActionListener actionListener = new ActionListener() { 
     public void actionPerformed(ActionEvent actionEvent) { 
      String name = actionEvent.getSource().toString(); 
      UserReaction(ObjectName.getComponentVariableName(name), "null"); 
     } 
    }; 
    Button calculate_btn = new Button("Calculate"); 
    calculate_btn.setName("Calculate"); 
    calculate_btn.addActionListener(actionListener); 
} 

private static void UserReaction(String objectName) { 
    if (objectName.equals("Calculate")) { 
     //do something;   
    } 
}static public String getComponentVariableName(String name) { 
    String res = (name.substring(name.indexOf("[") + 1)); 
    res = res.split(",")[0]; 
    return res; 
} 
+0

यह सवाल का जवाब नहीं देता है? –

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