2009-09-15 19 views
32

मैंने जावा में स्विंग का उपयोग करके एक फॉर्म बनाया है। फॉर्म में मैंने एक टेक्स्टफील्ड का उपयोग किया है जिस पर मुझे कुंजी दबाए जाने पर फोकस सेट करना होगा। जावा में किसी विशेष घटक पर फ़ोकस कैसे सेट करें?आप स्विंग में टेक्स्टफील्ड पर फ़ोकस कैसे सेट करते हैं?

+1

10 सवाल है, उनमें से कोई जवाब स्वीकार किए जाते हैं ... –

उत्तर

73

Component.requestFocus() आपको क्या चाहिए?

+0

धन्यवाद, मुझे देखने दो कि यह मेरे लिए काम करता है या नहीं –

+8

मुझे ढूंढने के लिए मुझे पांच मिनट लग गए ... "सरल" खोज के लिए बहुत कुछ :-(- आह ठीक है, जावा एपीआई दस्तावेज़ एक पैरागोन नहीं हैं वैसे भी स्पष्टता :-) – Joey

+3

एफवाईआई, [जेकॉमॉन्सेन्ट के लिए javadocs] (http://docs.oracle.com/javase/7/docs/api/index.html) 'अनुरोध फोकस() '," इसका उपयोग विधि निराश है क्योंकि इसका व्यवहार मंच निर्भर है। इसके बजाए हम [requestFocusInWindow()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#requestFocusInWindow()) के उपयोग की अनुशंसा करते हैं। यदि आप फोकस पर अधिक जानकारी चाहते हैं, तो देखें [फोकस सबसिस्टम का उपयोग कैसे करें] (http://java.sun.com/docs/books/tutorial/uiswing/misc/focus.html), जावा ट्यूटोरियल में एक अनुभाग । " –

13

अब हमने एपीआई की खोज की है जिसे हमें करने की ज़रूरत है, उसे एपीआई पढ़ें।

API दस्तावेज़ों के अनुसार

:

"क्योंकि इस विधि का ध्यान केंद्रित व्यवहार मंच पर निर्भर है, डेवलपर्स दृढ़ता से उपयोग requestFocusInWindow लिए प्रोत्साहित किया जाता है जब संभव।"

21

यह काम करेगा ..

SwingUtilities.invokeLater(new Runnable() { 

public void run() { 
     Component.requestFocus(); 
    } 
}); 
3

ध्यान दें कि उपरोक्त सभी जॉयसपेन में किसी कारण से विफल हो जाते हैं। ज्यादा परीक्षण और त्रुटि (ऊपर कहा गया है 5 मिनट से ज्यादा, वैसे भी) के बाद, यहाँ क्या अंत में काम किया है:

 final JTextField usernameField = new JTextField(); 
// ... 
     usernameField.addAncestorListener(new RequestFocusListener()); 
     JOptionPane.showOptionDialog(this, panel, "Credentials", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, null, null); 


public class RequestFocusListener implements AncestorListener { 
    @Override 
    public void ancestorAdded(final AncestorEvent e) { 
     final AncestorListener al = this; 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       final JComponent component = e.getComponent(); 
       component.requestFocusInWindow(); 
       component.removeAncestorListener(al); 
      } 
     }); 
    } 

    @Override 
    public void ancestorMoved(final AncestorEvent e) { 
    } 

    @Override 
    public void ancestorRemoved(final AncestorEvent e) { 
    } 
} 
+1

इस समाधान के लिए धन्यवाद। यह एकमात्र तरीका है यह काम किया। – MyPasswordIsLasercats

3

तुम भी JComponent.grabFocus(); उपयोग कर सकते हैं यह एक ही

+0

[JComponent.grabFocus()] के लिए जावाडोक (http://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html#grabFocus--) स्पष्ट रूप से बताता है कि इस विधि को चाहिए क्लाइंट कोड द्वारा उपयोग नहीं किया जाता है और 'requestFocusInWindow()' विधि का उपयोग करने का सुझाव देता है, जिसका पहले से ही अन्य उत्तरों में उल्लेख किया गया है। –

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