- - PR -
JavaApplet タイピングアプレットでの入力文字制限について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-12-16 14:44
初めてスレを立てさせてもらう者です。
類似処理などを探しましたが見つからないため、皆さんの意見を参考にと思った次第です。 アプレットで簡単なタイピングソフトを作成しています。 主な仕様を下記に記載します。 *.a〜zキーを順番に押下して、時間を計測するプログラムです。 1.起動時、テキストフィールドはShiftキーしか受け付けない。 2.Shiftキー押下で、スタートします。 3.スタートしたらa〜zキーだけを、テキストフィールドは受け付ける。 これだけではタイピングとは言えないですが、問題の部分周りだけを説明しました。 今の段階では、3の部分でkeyTypedイベントが反応してくれない状態です。 部分的なソースを下記に記載します。 public class TypingSoft extends Applet implements Runnable,ActionListener,KeyListener { int i; String s ; Thread th; String text = "abcdefghijklmnopqrstuvwxyz"; TextField tf = new TextField(); public void init() { i = 0; tf.addKeyListener(this); // 起動時はShiftキーのみ活性させる処理 tf.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { if(e.getKeyChar() != e.VK_SHIFT) { e.consume(); } } public void keyPressed(KeyEvent e) { if(e.getKeyCode() == e.VK_SHIFT) { tf.addKeyListener(new KeyAdapter() { // Shiftキー押下後の文字入力制限処理 public void keyTyped(KeyEvent e) { char chr = e.getKeyChar(); if(text.indexOf(chr) < 0 && !Character.isIdentifierIgnorable(chr)) { e.consume(); } } }); } } }); } /** * Shiftキー押下時の処理 */ public void keyPressed(KeyEvent e) { if(e.getKeyCode() == e.VK_SHIFT) { if(th == null) { i = 0; th = new Thread(this); th.start(); tf.addKeyListener(new KeyAdapter() { // zキー押下時の処理 public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_Z) { if(th != null) th = null; } } }); } } } /** * 実装では使わないメソッドも明記する */ public void keyTyped(KeyEvent e){} public void keyReleased(KeyEvent e){} } 長くなりましたが、各GUi部品作成やrun()などは省略しております。 問題なのは、init()とkeyPressed()でのKeyListenerが重複してしまっていることでしょうか? Shiftキーのイベントが常に残ってしまっているという現象です。 分かりにくいかもしれませんが、何かアドバイスをいただけたらと。 それでは、よろしくお願い致します。 [ メッセージ編集済み 編集者: またたび 編集日時 2005-12-16 14:53 ] [ メッセージ編集済み 編集者: またたび 編集日時 2005-12-16 16:06 ] [ メッセージ編集済み 編集者: またたび 編集日時 2005-12-16 16:15 ] |
|
投稿日時: 2005-12-20 21:08
こんにちは。
おそらく、processKeyEvent(KeyEvent)、またはprocess〜()メソッドで 操作できると思いますよ。 |
|
投稿日時: 2005-12-20 23:27
お返事ありがとうございます。
processKeyEvent()ですか、盲点でした。 APIを参照しながら、コーディングしてみたいと思います。 結果が分かり次第、会議室を通してご報告させていただきます。 [ メッセージ編集済み 編集者: またたび 編集日時 2005-12-20 23:28 ] |
|
投稿日時: 2005-12-21 00:02
要はフラグの立て方とaddKeyListener,removeKeyListenerの
タイミングの問題だと思うので、KeyListener(KeyAdapter)でも、 実現できると思いますが、 processKeyEvent()の方が読みやすく(簡素)に 書けると思います。 あと、問題になりそうなのは、日本語入力の場合ですが、 その場合、processInputMethodEvent()で実現できるでしょう。 この掲示板は、JavaのGUIについては反応が薄い気がするので、 他をあたると良いかもしれません。 |
|
投稿日時: 2005-12-21 09:28
ご丁寧にありがとうございます。
確かに、スレッドによって返答数がマチマチですものね。 JavaのGUIは、まだまだ発展途上なので全体的に浸透率が低いのかもですね。 ここ最近は、立て込んでいまして時間が空いたときにでもテストしてみます。 また、ご報告致します。 |
1