2013-06-30 14 views
5

यह कुंजी बाइंडिंग JPanel के निर्माता में है, लेकिन यह कुछ भी प्रिंट नहीं करता है जब मैं "h" दबाएँ। यदि अधिक कोड की आवश्यकता है, तो मैं इसे प्रदान कर सकता हूं। धन्यवाद!जावा स्विंग

String hide = "hide"; 
    this.getInputMap().put(KeyStroke.getKeyStroke('h'), hide); 
    this.getActionMap().put(hide, new AbstractAction() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
       System.out.println("HIDDEN"); 
      if (isHidden){ 
       slide.setVisible(true); 
      }else{ 
       slide.setVisible(false); 
      } 
     } 
    }); 
+1

बीटीडब्ल्यू आप केवल 'slide.setVisible (isHidden) का उपयोग कर सकते हैं;', यदि आप गलती नहीं करते हैं या जब पूर्वजों – nachokk

+0

मुझे यकीन है कि मैं अनुवर्ती हूं तो get getputMap (JComponent.WHEN_IN_FOCUSED_WINDOW) 'का उपयोग कर सकते हैं। slide.set दृश्यमान (सत्य/गलत) मेरे ज्ञान के लिए बहुत अच्छी तरह से काम करता है। – Yesha

+0

आप कर सकते हैं वही चीज़ कोड की एक लाइन के साथ करता है, तो/किसी और बयान। – camickr

उत्तर

8
this.getInputMap().... 

आप डिफ़ॉल्ट InputMap, जो InputMap है जब घटक ध्यान केंद्रित किया करने के लिए बाइंडिंग जोड़ने की कोशिश कर रहे हैं। डिफ़ॉल्ट रूप से एक जेपीनल में फोकस नहीं होता है। आप getInputMap(int) विधि का उपयोग कर अन्य InputMaps से एक का उपयोग प्रयास करना चाहिए। या आपको पैनल को फोकस करने और इसे फोकस करने की आवश्यकता होगी।

उचित चरों पर और जानकारी के लिए How to Use Key Bindings पर घुमाओ ट्यूटोरियल पढ़ें वांछित InputMap निर्दिष्ट करने के लिए उपयोग करने के लिए।

+0

धन्यवाद! WHEN_IN_FOCUSED_WINDOW बहुत अच्छी तरह से काम किया। क्या ऐसा कुछ है जिसे मैं प्रतिस्थापित कर सकता हूं ताकि खिड़की पर ध्यान केंद्रित न होने पर भी यह काम करेगा? मेरा आवेदन हमेशा शीर्ष पर सेट किया गया है, इसलिए यह हमेशा दिखाई देगा लेकिन जरूरी नहीं कि फोकस में। धन्यवाद! – Yesha

+0

सं स्विंग केवल घटनाओं का जवाब जब यह ध्यान दिया गया है। – camickr

+0

क्या इसे स्थायी फोकस देने का कोई तरीका है? – Yesha

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