2012-04-06 12 views
5

Ist es möglich, einen Hörer zu löschen, den ich auf meine JPanel legte? Wenn ich eine Methode anrufe, lege ich eine KeyListener auf das Panel, aber wenn ich diese Methode beende, möchte ich diesen Listener löschen.Entfernen Sie die Taste Listener von Panel

Hier ist meine Methode:

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 .." * Für bessere Hilfe in internationalen Foren, Wörter richtig buchstabieren. 2) Für bessere Hilfe, post ein [SSCCE] (http://sscce.org/). –

+2

* "Wenn ich diese Methode beende .." * 'Diese Methode' ist 'stopBall()' oder 'keyPressed()'? Ich finde deine Frage ziemlich verwirrend. Können Sie erklären, was Sie in Bezug darauf erreichen möchten, was der Benutzer sehen könnte? –

+1

Vergleichen Sie Strings nicht mit '==', da dies prüft, ob die beiden String * -Objekte * ein und dasselbe sind (was Ihnen egal ist), nicht wenn die Strings die gleichen Zeichen in der gleichen Reihenfolge enthalten (was Sie kümmern sich um). Verwenden Sie stattdessen die Methode String 'equals (...)' oder 'equalsIgnoreCase (...)'. –

Antwort

5

Sie haben einen uneingeschränkten Aufruf addKeyListener (KeyListener), so nehme ich an, dass Sie JPanel erweitert haben. Wenn ja, können Sie removeKeyListener (KeyListener) aufrufen. In Ihrem aktuellen Code ist Ihr Schlüssel-Listener anonym. Sie werden sie brauchen nur ein wenig zu ändern, um diese Referenz zu halten, etwa so:

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

Vielen Dank, dass mein Problem zu lösen !! – MTHeadss

0

Oder die Art und Weise mit den absoluten minimalen Anpassungen an Ihren Code

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

Aber wie bereits erwähnt in die Kommentare, sollten Sie für keybindings statt Keylisteners

Verwandte Themen