मेरे पास एक स्विंग ऐप है जिसे नियंत्रण या alt कुंजी दबाए जाने के आधार पर नियंत्रण के विभिन्न सेट प्रदर्शित करने की आवश्यकता होती है। मैंने मुख्य घटक में एक KeyListener जोड़ा, लेकिन यह केवल तभी अधिसूचित किया जाता है जब उस घटक का चयन किया गया हो, न कि उपसंवेदनशील का चयन किया गया हो। क्या एक घटक और सभी वंश के लिए घटनाओं को सुनने का कोई तरीका है?किसी घटक पदानुक्रम के लिए महत्वपूर्ण घटनाओं को सुनना
संपादित करें:
मैं मुख्य घटक के InputMap उपयोग करने की कोशिश, लेकिन जब एक आपरिवर्तक कुंजी दबाने कोई घटना निकाल दिया जाता है। विशेष रूप से, मैं निम्नलिखित कोड है:
InputMap inputMap = panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
inputMap.put(KeyStroke.getKeyStroke("pressed CONTROL"), "test1");
inputMap.put(KeyStroke.getKeyStroke("released CONTROL"), "test2");
ActionMap actionMap = panel.getActionMap();
actionMap.put("test1", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("pressed");
}
});
actionMap.put("test2", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("released");
}
});
जब दबाकर और नियंत्रण कुंजी को रिहा, इस प्रिंट होगा "जारी" लेकिन "दबाया"। किसी भी इनपुट मैप में कुछ भी पंजीकरण नहीं कर रहा है, इसलिए ऐसा नहीं है कि एक ही कुंजी स्ट्रोक के लिए कुछ और पंजीकृत है।
यह "जारी नियंत्रण" KeyStrokes के लिए काम करता है लेकिन "दबाए गए नियंत्रण" के लिए नहीं। इसी प्रकार alt और shift के लिए। –
@Adam Crume Well, कुछ नियंत्रण स्वयं को ctrl, alt, या shift में सुन सकते हैं। हालांकि, कम से कम अन्य कीस्ट्रोक के साथ परीक्षण, यह कुंजी प्रेस पर दी गई कार्रवाई शुरू करता है। माना जाता है कि, हालांकि, यह कीस्ट्रोक दबाए जाने पर बार-बार लॉन्च होगा। –
इनपुट मैप और एक्शनमैप के साथ जैक का उल्लेख कुंजी बाइंडिंग का उपयोग कर रहा है। फिर, ट्यूटोरियल की जांच करें जो आपकी समस्या का समाधान करेगी। –