2012-07-14 33 views
6

के जवाब नहीं है मैं JFrame का एक उपवर्ग एक वर्ग से JPanelJPanel KeyListener घटना

public class HelloWorld extends JPanel implements KeyListener 

मैं फ्रेम करने के लिए HelloWorld की एक वस्तु को जोड़ने के लिए बढ़ाया का उपयोग करता है - app.add(helloWorld);। अब, जब मैं KeyListener विधियों के किसी भी कुंजीपटल कुंजी को दबाता हूं तो ऐसा लगता है कि helloWorld में विंडो फोकस नहीं है। मैंने helloWorld.requestFocusInWindow(); को भी आमंत्रित करने का प्रयास किया है लेकिन अभी भी प्रतिक्रिया नहीं दे रहा है।

मैं इसे मुख्य प्रेस का जवाब कैसे दे सकता हूं?

+1

देखो जोड़ने के लिए (चाहिए http://docs.oracle.com/javase काम करने के लिए लगता है /tutorial/uiswing/misc/keybinding.html)। समस्या हल हो सकती है या नहीं, लेकिन स्विंग के लिए आम तौर पर बेहतर दृष्टिकोण। –

उत्तर

11

क्या आपने पैनल के लिए KeyListener सेट किया है पैनल ही पैनल होगा? इसके अलावा आपको शायद उस पैनल को ध्यान केंद्रित करने की आवश्यकता है। मैं इस कोड से यह परीक्षण किया है और यह के रूप में यह

class HelloWorld extends JPanel implements KeyListener{ 
    public void keyTyped(KeyEvent e) { 
     System.out.println("keyTyped: "+e); 
    } 
    public void keyPressed(KeyEvent e) { 
     System.out.println("keyPressed: "+e); 
    } 
    public void keyReleased(KeyEvent e) { 
     System.out.println("keyReleased: "+e); 
    } 
} 

class MyFrame extends JFrame { 
    public MyFrame() { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(200,200); 

     HelloWorld helloWorld=new HelloWorld(); 

     helloWorld.addKeyListener(helloWorld); 
     helloWorld.setFocusable(true); 

     add(helloWorld); 
     setVisible(true); 
    } 
    public static void main(String[] args) { 
     new MyFrame(); 
    } 
} 
+0

यदि आपके पास कस्टम mouselisteners है तो 'grabFocus() 'को न भूलें –

8

जेपीनल डिफ़ॉल्ट रूप से फ़ोकस करने योग्य नहीं है। यही है, यह फोकस से संबंधित घटनाओं का जवाब नहीं दे सकता है, जिसका अर्थ है कि यह keyevents का जवाब नहीं दे सकता है।

मैं सुझाव देने का सुझाव दूंगा कि फलक पर फोकस करने योग्य और फिर कोशिश कर रहा है। यह सुनिश्चित करने के लिए कि आप फोकस प्राप्त करते हैं, सुनिश्चित करें कि आप पहले पैनल पर क्लिक करें।

हालांकि समझें, आपको अजीब फोकस ट्रैवर्सल समस्याएं मिलेंगी, क्योंकि पैनल अब इनपुट फोकस प्राप्त करेगा क्योंकि उपयोगकर्ता आपके रूपों के माध्यम से नेविगेट करता है, ऐसा लगता है कि फोकस कुछ जगह खो गया है।

इसके अलावा, KeyListener इस तरह की स्थिति में अविश्वसनीय होते हैं (जिस तरह से फोकस प्रबंधक काम करता है)।

0

सरल आप में [कुंजी बाइंडिंग]

addKeylistener(new HelloWorld());