2016-05-07 9 views
0

私は単純なゲームを作っています。私はKeyListenerを実装しようとしていました。抽象メソッドKeyReleasedを実装する必要があることを私に伝えていますが、すでに3つのKeyListenerメソッドを実装しています(私は思っています)。どんな助けもありがとう。KeyListenerを実装する際のトラブル

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class mainGame extends JFrame implements KeyListener{ 
JPanel pane4=new JPanel(); 

public static void main (String [] args){ 
    new mainGame(); 
} 
public mainGame(){ 
    super ("game"); 
    setSize(800,600); 
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    setResizable(false); 
    setLocationRelativeTo(null); 
    pane4.addKeyListener(this); 
    add(pane4); 
    setVisible(true); 
} 
public void KeyTyped(KeyEvent e){ 
    //not using this method 
} 
public void KeyPressed(KeyEvent e){ 

    int keyID=e.getKeyCode(); 

    if (keyID==e.VK_ESCAPE){ 
     dispose(); 
     menu.main(null); 
    } 
    else if (keyID==e.VK_KP_RIGHT){ 

    } 
    else if (keyID==e.VK_KP_RIGHT){ 

    } 


} 
public void KeyReleased(KeyEvent e){ 
    //not using this method 
} 

}

+0

大文字と小文字を区別します。 'KeyReleased'ではなく' keyReleased'です。入力ミスとしてクローズする投票。 –

+0

今後の同様の問題を防ぐため、スーパーメソッドをオーバーライドする必要があるメソッドの前に、常に@ @ Override'アノテーションを使用してください。これを行うと、コンパイラはエラーを警告します。 –

答えて

2

資本の事項:ここでは、コードです。それはkeyReleasedではなく、KeyReleasedです。入力ミスとしてクローズする投票。

今後同様の問題を防ぐには、superメソッドをオーバーライドする必要があると思われるメソッドの前に常に@Override注釈を使用してください。これを行うと、コンパイラはエラーを警告します。例:

@Override 
public void KeyReleased(KeyEvent e){ 
    // 
} 

上記のコードは、コンパイラエラーが発生し、メソッドシグネチャを修正する必要があることに気付きます。

その他の無関係なポイント:

  • それはそれは、クラスにあまりにも多くの責任を与えているので、あなたのGUIクラスは、リスナーインタフェースを実装するのを避けるのがベストです。匿名の内部クラス(それらに精通していない場合はこれらを参照)、またはプライベート内部クラスまたは独立クラスを使用する方がよいでしょう。
  • Swing非テキストコンポーネントのキープレスに反応するために、KeyListenersではなく、キーバインディングを使用するほうがよいでしょう。
関連する問題