2012-04-25 18 views
5

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

ठीक है, तो फिर मैंने संवाद में प्रत्येक फ़ील्ड (केवल उनमें से 3, कोई बड़ा सौदा नहीं) के लिए KeyListener बनाने के लिए आगे बढ़े, जो मैन्युअल रूप से ओके बटन दबाएगा यदि उपयोगकर्ता उन पर एंटर दबाता है। समस्या यह है कि पहला क्षेत्र (और इसलिए केंद्रित एक) JSpinner है, जो अपने KeyEvents का उपभोग करता है। तो एंटर दबाकर कुछ भी नहीं करता है।

तत्वों को पुनर्गठित किए बिना मैं अपने संवाद पर "ठीक से दर्ज करें" व्यवहार कैसे प्राप्त कर सकता हूं?

उत्तर

8

दो बातें:

  1. आप setDefaultButton ?: का उपयोग कर dialog.getRootPane().setDefaultButton(okButton)
  2. आप एक invokeLater में अपने requestFocusInWindow() आह्वान पर विचार कर सकते कोशिश की है।

इस तरह:

SwingUtilities.invokeLater(new Runnable() 
    @Override 
    public void run() { 
     okButton.requestFocusInWindow(); 
    } 
}); 
+0

setDefaultButton विधि चाल किया! धन्यवाद। –

+1

+1, मुझे जवाब पसंद आया, डिफ़ॉल्ट बटन के साथ यह कितना आसान है :-)। जावा डॉक्स से बस एक साइड नोट - "डिफ़ॉल्ट बटन सुविधा का सटीक कार्यान्वयन देखने और महसूस पर निर्भर करता है। उदाहरण के लिए, विंडोज़ में दिखने और महसूस करने के लिए, डिफ़ॉल्ट बटन में जो भी बटन फोकस होता है, उसमें डिफ़ॉल्ट बटन बदल जाता है, ताकि एंटर क्लिक दबाएं फोकस बटन। जब कोई बटन फोकस नहीं करता है, तो बटन जिसे आप मूल रूप से डिफ़ॉल्ट बटन के रूप में निर्दिष्ट करते हैं, वह फिर से डिफ़ॉल्ट बटन बन जाता है। " –

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