- ベストアンサー
キーイベント処理について
ボタンをキー入力によって押したいんですけど、どうもうまくできません。0~7の数字とF12を使って動作させたいです。あと、ボタンを押すとそのウインドウが閉じるようにしたいのですが・・・教えてもらえますか?(右上の×じゃなくて、Buttonのボタンです) お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
「どうもうまくいきません」というのが、どううまくいかないのかがわからないのですが・・。少なくとも、キー入力のためのイベントリスナーの処理などはわかっていて、実際にやってみたがうまく呼び出されない、というようなことでしょうか。もしそうだとしたら、ちょっと思いついたのですが。 キー入力のイベント処理というのは、マウスなどに比べると意外にやっかいです。なぜなら、「どのコンポーネントがそのイベントを受け取るか」をよく理解していないといけないからです。 一般的には、FrameにKeyListenerを組み込んだりして処理しようと考えます。が、このFrameにコンポーネントがあると、それではうまくいかない場合があります。例えばTextFieldなどがある場合(そしてこのTextFieldにフォーカスがある場合)には、TextFieldがイベントを取得してしまうため、Frameに組み込まれたKeyListenerは機能しません。 テキスト関係のものがなくとも、Frame内にフォーカスを受け取ることのできるコンポーネントがあり、それにフォーカスがある場合には、そちらが先にKeyEventを取得します。 従って、もし「KeyListenerを組み込んでいるのにうまく動かない」ということであれば、フォーカスを受け取るコンポーネントがないかチェックし、そのコンポーネントに対してもKeyListenerを組み込んでみるとよいでしょう。
その他の回答 (2)
#2です。 まず、「Applet継承クラスの中にFrame継承クラスが内部クラスとして存在する」という状況がよくわからないのですが・・。とりあえずエラーについてだけ。 implementsを使うときには、そのクラスに用意されているメソッドをすべて実装しないといけません。エラーは、keyTypedメソッドが用意されていないことをいっています。KeyListenerには、keyPressed, keyReleased, keyTypedの3つのメソッドが必要です。たとえ使わなくても、メソッドだけは用意しないといけません。
- pcbeginner
- ベストアンサー率46% (261/560)
>ボタンをキー入力によって押したいんですけど、どうもうまくできません。0~7の数字とF12を使って動作させたいです。 実際にボタンが押された状態?見え方?はしないと思いますが、 0ボタンを押した時の処理と0キーを押した時の処理を同じにすれば「動作」は同じになりませんか? ↓な感じで public void actionPerformed(ActionEvent ae){ String command = ae.getActionCommand(); if(commando.equals(0ボタンのアクションコマンド)){ 0ボタン処理(); } … } と public void keyPressed(KeyEvent ke){ int key_code = ke.getKeyCode(); if(key_code == 0キーのキーコード){ 0ボタン処理(); } } >ボタンを押すとそのウインドウが閉じるようにしたいのですが・・・ これは、そのボタンを押した時のアクションイベントで、ウィンドウを閉じればいいのでは? (ヒント:閉じる→非表示にする。) JavaのAPIの java.awtパッケージ java.awt.eventパッケージ を読むといいですよ。
補足
public class Azukari extends Applet implements ActionListener{ の中に、 class key extends Frame implements KeyListener{ public void keyPressed(KeyEvent e){ if(e.getKeyCode() == KeyEvent.VK_0){ f1.setVisible(true); } } } これを入れたのですが・・・。 Azukari.java:63: Azukari.key は abstract として宣言する必要があります。keyTyped( java.awt.event.KeyEvent) を Azukari.key で定義しません。 class key extends Frame implements KeyListener{ ^ エラー 1 個 というエラーが出てしまいます。