2012-04-06 12 views
5

JPanelに入れたリスナーをクリアすることはできますか?メソッドを呼び出すと、パネルにKeyListenerを置いていますが、このメソッドを終了するとそのリスナーをクリアします。あなたがaddKeyListener(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)* "Hey guyz .." *国際フォーラムに関するより良いヘルプのためには、適切な単語を入力してください。 2)すぐにより良い助けを得るために、[SSCCE](http://sscce.org/)を投稿してください。 –

+2

* "このメソッドを終了すると.." * 'このメソッドは 'stopBall()'または 'keyPressed()'ですか?私はあなたの質問が非常に混乱していると感じます。ユーザーが何を見ることができるかについて、あなたが達成したいことを説明できますか? –

+1

'=='を使って文字列を比較しないでください。これは、文字列が同じ文字を同じ順序で保持しているのではなく、2つのString *オブジェクトが同じであるかどうかをテストします。あなたは気にする)。代わりに、文字列 'equals(...)'または 'equalsIgnoreCase(...)'メソッドを使用してください。 –

答えて

5

ので、私はあなたがJPanelのを拡張しましたことを推測:

は、ここに私の方法です。その場合は、removeKeyListener(KeyListener)を呼び出すことができます。現在のコードでは、キーリスナーは匿名です。

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

コードに

絶対最小限の調整と
// 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

かの方法しかし、すでに述べたに:あなたはそうのように、それをその参照を保持するだけのビットを変更する必要がありますあなたはキーストーリーの代わりにキーバインドを選択する必要があります

関連する問題