- - PR -
java.awt.ButtonのENTERでbeep音が発生する
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-03 11:47
こんにちは。この掲示板には大変お世話になっております。
現在、小型端末におけるJavaAppletの開発を行っておりますが次の問題 がどうしても解消できなくて困っております。皆さんの知恵を拝借いただけ たらと思い投稿しました。 [環境] JDK 1.1.8 Java Applet ハンディ端末 [やりたいこと] java.awt.Buttonにフォーカスがアクティブな状態で、ENTERを押すと ボタンを押したことと同様の処理(ActionEvent)を行う。 [現在の問題] KeyEventでKeyEvent.VK_ENTERを拾って、その後ActionEventを作って dispatchする方法で、”一応”やりたいことが達成できるのですが、 何故かbeep音が出てしまうのです。このbeep音が仕様上の問題になっ ています。 普通にボタンにフォーカスを当てて、(PC上で)SPACEキーをおしたり 、マウスでクリックした場合は、beep音が出ないんですけど、何故か ENTERを押して KeyEvent → Enter → ActionEvent → dispatch でやるとbeep音が発 生してしまうのです。 beep音は仕様上、エラー時に発生させることになっており、Buttonで ENTERを押してbeep音がなってしまうと利用者が混乱してしまうことが 予想されます。 ご存知の方いらっしゃいますでしょうか? よろしくお願い致します。 当方がいろいろと試した、サンプルコードを次に記述します。 Buttonを継承したSomeButtonクラスの中にKeyAdapterを継承したインナー クラスを作って以下のイベント処理を記述しています。 方法1〜3は、当方が試したほかのイベントへの転送であり、実際動作さ せるときは一つの方法です。 ======================================================== <pre> ※ボタンに登録するキーイベント public void keyPressed(KeyEvent e) { int c = e.getKeyCode(); // KEYの判定 switch (c) { case KeyEvent.VK_ENTER : // ENTER break; } } /** * ENTERが押されたときはClickと同様の処理を行う * (外部クラスに出してstatic化可能) * */ private void actionENTER() { System.out.println("ENTERが押されました"); ※方法1 マウスイベントを発生させてみる → 反応無 MouseEvent me = new MouseEvent( SomeButton.this, MouseEvent.MOUSE_CLICKED, System.currentTimeMillis(), 0, Button.this.getBounds().x - 10, Button.this.getBounds().y - 10, 1, false); SomeButton.this.dispatchEvent(me); ※方法2 スペースキーのイベントを発行させてみる → 反応無 KeyEventの種類によっては例外発生 KeyEvent ke = new KeyEvent( SomeButton.this, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), 0, KeyEvent.VK_SPACE, (char) KeyEvent.VK_SPACE); SomeButton.this.dispatchEvent(ke); // 何故か以下の方法だとbeep音が発生する ActionEvent ae = new ActionEvent( SomeButton.this, ActionEvent.ACTION_PERFORMED, SomeButton.this.getLabel()); Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(ae); SomeButton.this.dispatchEvent(ae); } </pre> | ||||
|
投稿日時: 2004-12-03 12:29
おそらく呼ばれたKeyListenerで処理できなかったと判断され、その親クラスで処理しようとしたけど出来なかったため、Beep音が鳴っていると思われます。
そこで、ActionEventを投げた後、KeyEvent#consume()を呼べば、解決するかもしれません。 | ||||
|
投稿日時: 2004-12-03 12:59
かずくん さん
返信ありがとうございます。 早速試してみます。 | ||||
|
投稿日時: 2004-12-03 13:21
かずくん さん
以下のように修正したところ、beep音なしで動作しました!! ありがとうございました。
|
1