2012-04-06 16 views
5

से कुंजी श्रोता निकालें क्या एक श्रोता को साफ़ करना संभव है जिसे मैंने अपने JPanel पर रखा है? जब मैं एक विधि कहता हूं, तो मैंने पैनल पर KeyListener लगाया लेकिन जब मैंने इस विधि को छोड़ दिया, तो मैं उस श्रोता को साफ़ करना चाहता हूं।पैनल

private void stopBall(final Graphics2D g2, int posBallY, String winner) { 

     move = false; 
     scorePanel.showPressSpace(true);  

     setFocusable(true); 
     requestFocus(); 

     addKeyListener(new KeyAdapter() { 

      public void keyPressed(KeyEvent e){ 
       if (e.getKeyCode() == KeyEvent.VK_SPACE){ 

        setPosX(getPlayPanelWidth()/2); 
        setPosY(0); 

        move = true; 
        scorePanel.showPressSpace(false); 
        initBall(g2); 
       } 

      }}); 

     if (winner == "player1") { 
      scoreCountPlayer1++; 
      scorePanel.getLab_Player1().setText("" + scoreCountPlayer1); 


     } else if (winner == "comp") { 
      scoreCountComputer++; 
      scorePanel.getLab_Computer().setText("" + scoreCountComputer); 
     } 
    } 
+0

1) * "अरे guyz .." * अंतरराष्ट्रीय मंचों पर बेहतर मदद के लिए, शब्दों को सही ढंग से वर्तनी के बजाय कीबाइंडिंग का चयन करना चाहिए। 2) जल्द से जल्द बेहतर सहायता के लिए, एक [एसएससीसीई] (http://sscce.org/) पोस्ट करें। –

+2

* "जब मैंने इस विधि को छोड़ दिया .." * 'इस विधि' को रोकना बंद करें() 'या' keyPressed() '? मुझे आपका प्रश्न काफी भ्रमित लगता है। क्या आप समझा सकते हैं कि उपयोगकर्ता क्या देख सकता है इसके संदर्भ में आप क्या हासिल करना चाहते हैं? –

+1

स्ट्रिंग्स की तुलना '==' के प्रयोग से तुलना न करें यदि दो स्ट्रिंग * ऑब्जेक्ट्स * एक हैं और वही हैं (जिन्हें आप परवाह नहीं है), न कि स्ट्रिंग्स एक ही क्रम में समान वर्ण रखते हैं (जो आप * के बारे में परवाह करते हैं)। इसके बजाय स्ट्रिंग 'बराबर (...)' या 'equalsIgnoreCase (...) 'विधि का उपयोग करें। –

उत्तर

5

आप addKeyListener (KeyListener) को एक अयोग्य कॉल है, इसलिए मुझे लगता है कि आप JPanel बढ़ाया गया है:

यहाँ मेरी विधि है। यदि ऐसा है, तो आप RemoveKeyListener (KeyListener) को कॉल कर सकते हैं। आपके वर्तमान कोड में, आपका कुंजी श्रोता अनाम है। तुम्हें पता है, कि संदर्भ को पकड़ने की तो जैसे सिर्फ एक सा इसे बदलने के लिए की आवश्यकता होगी:

// Create a variable holding the listener 
KeyAdapter keyAdapter = new KeyAdapter() 
{ 
    public void keyPressed(KeyEvent e) 
    { 
    if (e.getKeyCode() == KeyEvent.VK_SPACE) 
    { 
     setPosX(getPlayPanelWidth()/2); 
     setPosY(0); 

     move = true; 
     scorePanel.showPressSpace(false); 
     initBall(g2); 
    } 

    } 
}; 
// Register the listener with this JPanel 
addKeyListener(keyAdapter); 

// Time passes... 

// Remove the listener from this JPanel 
removeKeyListener(keyAdapter); 
+0

बहुत बहुत धन्यवाद, जो मेरी समस्या का समाधान करता है !! – MTHeadss

0

या अपने कोड को पूर्ण न्यूनतम समायोजन

addKeyListener(new KeyAdapter() { 
    public void keyPressed(KeyEvent e){ 
    if (e.getKeyCode() == KeyEvent.VK_SPACE){ 
     ((JPanel)e.getSource()).removeKeyListener(this); 
     setPosX(getPlayPanelWidth()/2); 
     setPosY(0); 

     move = true; 
     scorePanel.showPressSpace(false); 
     initBall(g2); 
    } 
    } 
}); 

लेकिन जैसे पहले से ही में कहा गया है के साथ जिस तरह से टिप्पणियां, आपको keylisteners

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