2011-01-09 19 views
12

को फोकस स्थापना मैं NetBeans में विकसित एक आवेदन पत्र है और मैं जब एक पैनल प्रदर्शित किया जाता है एक निश्चित jTextField को फोकस सेट करना चाहते हैं। मैंने कई पदों को पढ़ा है और विभिन्न तरीकों की कोशिश की है लेकिन काम नहीं किया है। मुख्य मुद्दों में से एक है, जहां आवश्यक कोड है, जो मैं मेरे मामले में विश्वास है जगह है this.txtMessage.requestFocusInWindow();एक पाठ क्षेत्र

कुछ पदों है कि एक खिड़की श्रोता का उपयोग कर से संकेत मिलता है, तथापि के रूप में NetBeans जीयूआई उत्पन्न किया है, मैं कैसे लागू करने के लिए नहीं देख सकते हैं इंटरफेस क्योंकि मैं कोड को संपादित नहीं कर सकता जो जेपीएएनईएल इत्यादि बनाता है। पूरी बात बहुत निराशाजनक है और मुझे सच में विश्वास नहीं है कि यह मुश्किल होना चाहिए।

बस एक परीक्षण के रूप में मैंने पैनल पर एक बटन पर requestFocusInWindow(); जोड़ा और यह वांछित इनपुट पर ध्यान केंद्रित किया।

+1

क्या आपको नेटबीन कोड जनरेशन का उपयोग करना चाहिए क्योंकि यह हाथ से निर्मित स्विंग परियोजनाओं में अक्सर करना आसान होता है। व्यक्तिगत रूप से, यह एक कारण है कि मुझे लगता है कि नेट-बीन के मैटिस के माध्यम से कोड जेनरेटर के साथ जटिल स्विंग परियोजनाएं बनाना हाथ से कोड बनाने से कहीं अधिक कठिन है। –

उत्तर

15

मैं एक ऐसी ही परिदृश्य में जहाँ पड़ा है जब पैनल दिखाया गया था तो मुझे पैनल के भीतर एक टेक्स्ट बॉक्स पर फोकस सेट करने की आवश्यकता थी। पैनल को एप्लिकेशन स्टार्टअप पर लोड किया गया था, इसलिए मैं कन्स्ट्रक्टर में फोकस सेट नहीं कर सका। चूंकि पैनल को लोड नहीं किया जा रहा था या शो पर ध्यान दिया जा रहा था, इसका मतलब था कि मेरे पास फोकस अनुरोध को आग लगाने के लिए कोई घटना नहीं थी।

इसे हल करने के लिए, मैंने अपने मुख्य पर एक वैश्विक विधि जोड़ा जो पैनल में एक विधि कहलाता है जिसने टेक्स्ट क्षेत्र पर requestFocusInWindow() को बुलाया। मैंने बटन को वैश्विक विधि में कॉल किया जो पैनल को दिखाता है, दिखाने के लिए कॉल के बाद। इसका मतलब था कि पैनल दिखाया जाएगा और फिर टेक्स्ट क्षेत्र को पैनल दिखाने के बाद फोकस सौंपा जाएगा। उम्मीद है कि समझ में आता है और मदद करता है!

इसके अलावा, आप डिज़ाइन व्यू में ऑब्जेक्ट पर राइट क्लिक करके और कस्टमाइज़ कोड चुनकर अधिकांश ऑटो-जेनरेट कोड संपादित कर सकते हैं, हालांकि मुझे नहीं लगता कि यह आपको पैनलों को संपादित करने की अनुमति देता है।

10

मैं अगर मैं कुछ यहाँ याद कर रहा हूँ यकीन नहीं है, लेकिन वहाँ कोई कारण नहीं क्यों आप अपने पैनल के लिए एक श्रोता नहीं जोड़ सकते हैं।

Netbeans में, बस संपादक विंडो के शीर्ष बाएं में "स्रोत" बटन हिट और आप कोड के सबसे संपादित कर सकते हैं। वास्तविक लेआउट कोड ज्यादातर लॉक होता है, लेकिन यदि आपको आवश्यकता हो तो आप उसे अनुकूलित भी कर सकते हैं।

जहां तक ​​मुझे पता है, txtMessage.requestFocusInWindow() विंडो को पहली बार प्रदर्शित होने पर डिफ़ॉल्ट फोकस सेट करना है। के बाद खिड़की पहले से ही प्रदर्शित किया गया है आप ध्यान केंद्रित करने का अनुरोध करना चाहते हैं, तो आप का उपयोग करना चाहिए txtMessage.requestFocus()

परीक्षण के लिए, तो आप सिर्फ एक श्रोता निर्माता में जोड़ सकते हैं:

addWindowListener(new WindowAdapter(){ 
    public void windowOpened(WindowEvent e){ 
    txtMessage.requestFocus(); 
    } 
}); 
+1

आपको requestFocus() का उपयोग नहीं करना चाहिए। उस विधि के लिए एपीआई विवरण पढ़ें। requestFocusInWindow() उपयोग करने के लिए उचित तरीका है। – camickr

+0

हाय रियान और उत्तर के लिए धन्यवाद, यह मुद्दा जेपीनल के साथ है जिसमें एक jTextField है जिसे मैं फोकस करना चाहता हूं। मुख्य विंडो जेपीनल को लोड करती है जब इसे इसकी आवश्यकता होती है, txtMessage.requestFocus() का कोई प्रभाव नहीं पड़ता है। और मुख्य विंडो पर एक विंडो श्रोता जोड़ने के समय की बर्बादी की तरह लगता है क्योंकि यह कई जेपीनल को टेक्स्ट फ़ील्ड इत्यादि के साथ ही लोड नहीं करता है। – Lee

3

एक JFrame या JDialog आप हमेशा setVisible() विधि के ऊपर लिख सकते हैं, यह अच्छी तरह से काम करता है। मैंने जेपीनल में कोशिश नहीं की है, लेकिन एक विकल्प हो सकता है।

@Override 
public void setVisible(boolean value) { 
    super.setVisible(value); 
    control.requestFocusInWindow(); 
} 
0

मेरे लिए यह काम करने के लिए प्राप्त करने के लिए सबसे आसान तरीका है,, component.requestFocus(); लाइन डालने के लिए setVisible(true); लाइन के बाद, अपने फ्रेम या पैनल निर्माता के नीचे स्थित है।

यह शायद, ध्यान के लिए पूछ के बाद सभी घटकों को बनाया गया है, क्योंकि एक नए घटक बनाने, ध्यान अनुरोध के लिए पूछ के बाद, अपने घटक ढीला ते फोकस कर देगा के साथ करते हैं, और ध्यान केंद्रित करने के लिए जाना बनाने के लिए कुछ न कुछ है आपके नव निर्मित घटक। कम से कम, मैं यही मानता हूं।

1

मैंने हमेशा के लिए इस के साथ खिलवाड़ किया है, और आखिरकार ऐसा कुछ पाया जो हमेशा काम करता प्रतीत होता है!

textField = new JTextField() { 

     public void addNotify() { 
      super.addNotify(); 
      requestFocus(); 
     } 
    }; 
0

उपरोक्त में से कोई, मेरे लिए काम किया, क्योंकि मेरी खिड़की एक JPopupMenu है।

क्या काम किया है यह था:

addAncestorListener(new AncestorListener() { 
    @Override 
    public void ancestorAdded(AncestorEvent ae) { 
     myEdit.requestFocus(); 
    } 

    // ... other ancestor listener methods 
} 
0

मैं पाठ फ़ील्ड पर एक AncesterAdded घटना और विंडो में का अनुरोध फोकस सेट करके ऐसा किया।

+1

क्या आप कुछ उदाहरण कोड पोस्ट कर सकते हैं? – shieldgenerator7

0

आप Netbeans के साथ अपने जीयूआई बनाते हैं, तो आप भी कुछ स्वयं लिखे कोड सम्मिलित कर सकते हैं। बस एक तत्व (शायद बटन, पैनल या खिड़की) का चयन करें और "गुण" -टैबॉग में "कोड" -टैब का उपयोग करें।

वहाँ आप पूर्व और निर्माण प्रक्रिया के विभिन्न भागों के लिए बाद के कोड सम्मिलित कर सकते हैं।

मुझे लगता है कि विंडो के बाद "ऑल-ऑल-सेट-कोड" फ़ील्ड आपके कोड के लिए एक अच्छी जगह है, या आप इसे ईवेंट ("Properties" -dialog -> "ईवेंट") से जोड़ सकते हैं "घटक फ़ील्ड/पैनल के घटक "।

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