2016-03-23 23 views
0

私のプログラムにKeyListenerを使用しようとしています。 私は私のメインクラスにこのクラスを追加しました:私は私のメインクラス内のどこにでもaddKeyListener(new CustomKeyListener())メソッドを追加することはできませんよしかしキーリスナーを追加できないのはなぜですか?

class CustomKeyListener implements KeyListener{ 
    @Override 
    public void keyTyped(KeyEvent k) {} 
    @Override 
    public void keyPressed(KeyEvent k) {} 
    @Override 
    public void keyReleased(KeyEvent k) {}  
} 

。 私は何が欠けていますか?

以前のquestionに基づいて、私はそれがグラフィックインターフェイスでしか機能しないことを理解しています。私はちょうど任意のフォームを追加しても動作しますか?

誰でもこの問題を解明できますか?

+1

KeyListenerを何に追加しようとしていますか? – apicellaj

+1

「いくらかの仲裁形態」は私には正しいとは言えません。このように進めたい場合は、ユーザーが見て使用したいグラフィカルユーザーインターフェイスを構築する必要があります。 –

+0

@ OleV.V。私は唯一のユーザーです。私が望むのは、このキーリストを追加して、ループ処理を停止するためにキーを押している操作をキャッチすることができるようにすることです。それでおしまい。 –

答えて

0

あなたのメインクラスは、使用しようとしているメソッドを実際にサポートするクラスを実装/拡張していますか?

あなたのメインクラスが何であるか、達成したいことに関するいくつかのコンテキスト。 これはおそらく代わりに必要なスキャナーですか? もしそうなら、それを使い方を学ぶためにこちらを見てください。 http://www.tutorialspoint.com/java/util/java_util_scanner.htm

また、これはおそらく同様に役立つかもしれない: Java using scanner enter key pressed

+0

私はすでに 'Scanner'メソッドを試しましたが、私のためにはうまくいきませんでした。私のメインクラスに 'Implements KeyListener'を追加する必要がありますか? –

0

あなたのクラスはaddKeyListenerメソッドを持っている必要があります。これは、クラスがComponentまたはJComponentから派生している場合に当てはまります。したがって、これらのクラスのいずれかからクラスを派生させる必要があります:

class MyClass extends JComponent 

継承は直接的である必要はありません。あなたのクラスが(例えば)JFrameから派生している場合、JFrame自体がComponentから派生しているため、間接的にaddKeyListenerメソッドを継承します。

また、this questionの回答で指摘されているように、クラスにはキーリスナーが機能するようにフォーカスする必要があります。

エラー

静的コンテキストでこれを使用することはできません

this.addKeyListener(new CustomKeyListener()); 

を使用しようとなったあなたはコメントで書いた

更新

呼び出したのは静的メソッド(この場合はmainメソッド)から呼び出しを行ったためです。
thisは、クラスの現在のインスタンスを参照します。静的メソッドでは、インスタンスはありません。これは実際には静的メソッドの定義です。

あなたは、インスタンスを作成している何をすべきか:

MyClass newInstance = new MyClass(); 

さて、あなたはそのインスタンスにキーリスナーを追加することができます。

newInstance.addKeyListener(new CustomKeyListener()); 

ます。また、インスタンスでこれを行うことができますメソッド(キーワードstaticを持たないメソッド)を呼び出し、インスタンスからそのメソッドを呼び出します。

公式のJavaチュートリアルでは、この件に関してさらにexplanationがあります。

+0

。 'MyClass型の囲むインスタンスはアクセスできません。 MyClass型の囲むインスタンス(例えば、x.new A()のxはMyClassのインスタンス)で割り当てを限定する必要があります)。あなたが言ったことはすべて実行しましたが、今はこのエラーが発生しています。MyClassは私のメインクラスです –

+0

今のところ、 'CustomKeyListener'をメインクラスの外に持つのが最も簡単でしょう。一度経験があれば、内部クラスについて学ぶことができます。または、エラーメッセージに示すように: 'addKeyListener(MyClass.new CustomKeyListener())'。 –

+1

ありがとうございます。病気はそれに取り組んでいます。 –

関連する問題