繁体   English   中英

从面板中删除关键侦听器

[英]Remove key listener from panel

是否可以清除我放在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);
        }   
    }

您对 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);

或者对代码进行绝对最小调整的方式

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

但正如评论中所述,您应该选择键绑定而不是键侦听器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM