次の様なプログラムを書きました。

class listener implements KeyListener{
String TypedKeyName;
....
}

勿論必要なmethodは全て記述しました。TypedKeyNameには入力された
キーの名前を保存します。
次に、Appletクラスを拡張し、Runnableをimplementsしたクラスを
作成して、その中でlistenerのインスタンスlis_insを作り、

addKeyListener(lis_ins);

としました。run()の中で永久ループにしてTypedKeyNameの値をpaint()にて
表示させようと思ったのですが、上手くいきません(全く更新されません)。
参考書には

addEventListener(this);

とばかり載っているのですが、ひょっとして、Componentクラスを
継承していないとリスナーには指定出来ないのでしょうか?
分かり難い質問で申し訳ありません。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

paintの方には問題がない(本当にKeyEventが発生していない)と仮定して書いてみます。



Appletにフォーカスは当たっているでしょうか?
すべてのバージョンでそうなのか分かりませんが、うちのappletviewerで動かした場合、AppletがrequestFocusしてやらないとフォーカスが来ないようです。
IE5上で実行すると、最初からフォーカスが当たっているみたいですが。

Componentクラスを継承していないとリスナーには指定出来ない、ってことはありません。
    • good
    • 0
この回答へのお礼

回答有難うございます。無事動かす事が出来ました。

原因は二つありました。一つはご指摘の通りFocusが当たっていなかった事。
それからもう一つの原因なんですが・・御免なさい!
実はinit()内でスレッドのインスタンスを作り、start()させるのを
忘れていました。いくらrun()を記述しようと、スレッドが動いていなければ
repaint()が呼び出されるわけがありませんでした。

こんな初歩のミスで、しかもそれに気づく事なく安易に質問してしまい、
申し訳ありませんでした。
そして改めて、親切に教えて頂いて有難うございました。

お礼日時:2001/02/16 00:31

失礼ですが、ちょっと状態がよくわからないので質問させてください。



paint()はうまくうごいているのですか?

keyEvent以外の方法でキックしてみたら期待通りに動くのでしょうか。

イベント受け取ったさきで実行するメソッドに
System.out.println("xxx");
いれてコンソール表示みてみて、
コンソールにxxxが表示されていないようなら
「キーイベントが正しくわたっていない」
xxxは表示されているならイベントの問題ではない、
ということになるとおもうのですが…
    • good
    • 0
この回答へのお礼

回答有難うございます。動かない理由は自分のつまらないミスでした。
スレッドを動かすのを忘れていたのです。全く見当違いな所に疑いを持って
いました。

System.out.println("xxx");
成る程、appletviewerを使っている場合、そうすればデバッグに
活用する事が出来ますね。目から鱗が落ちました。
改めて、有難うございました。

お礼日時:2001/02/16 00:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング