2012-04-06 11 views
5

È possibile cancellare un listener che ho inserito nel mio JPanel? Quando chiamo un metodo, inserisco uno KeyListener sul pannello, ma quando esco da questo metodo, voglio cancellare quel listener.Rimozione del listener di chiavi dal pannello

Qui è il mio metodo:

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) * "Hey guyz .." * Per un aiuto migliore sui forum internazionali, scrivere correttamente le parole. 2) Per un aiuto migliore prima, pubblica un [SSCCE] (http://sscce.org/). –

+2

* "quando esco da questo metodo .." * 'questo metodo' è 'stopBall()' o 'keyPressed()'? Trovo la tua domanda abbastanza confusa. Potresti spiegare cosa vuoi ottenere in termini di ciò che l'utente potrebbe vedere? –

+1

Non confrontare le stringhe usando '==' in quanto verifica se i due oggetti String * * sono uno e lo stesso (di cui non ti interessa), non se le stringhe contengono gli stessi caratteri nello stesso ordine (che * ti * freghi di). Usa invece il metodo String 'equals (...)' o 'equalsIgnoreCase (...)'. –

risposta

5

si ha una chiamata non qualificata per addKeyListener (KeyListener), quindi presumo che hai esteso JPanel. In tal caso, puoi chiamare removeKeyListener (KeyListener). Nel tuo codice corrente, il tuo ascoltatore di chiavi è anonimo. Avrete bisogno di cambiare solo un po 'di aggrapparsi a quello di riferimento, in questo modo:

// 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

Grazie mille, questo risolve il mio problema !! – MTHeadss

0

O il modo con gli assoluti regolazioni minime al codice

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); 
    } 
    } 
}); 

Ma, come già indicato nella i commenti, si dovrebbe optare per le combinazioni di tasti invece di keylisteners

Problemi correlati