- - PR -
KeyMap、KeyStrokeについて
1
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-03 19:57
皆様、宜しくお願い致します。
以前、JTextAreaについてこの掲示板で質問をさせて頂いた際に、『さくらば』様からご返答を頂きまして、正常に動作させることが出来ました。仕事の都合でちょっとそのプログラムから離れていたのですが、再度深く作りこもうと思った所、以下の部分でどうしてもわからない箇所がありました。 Keymap keymap = area.getKeymap(); keymap.addActionForKeyStroke(KeyStroke.getKeyStroke("typed \010"), new DefaultEditorKit.DefaultKeyTypedAction()); の所なのですが、これはBackSpaceを押した際のビープ音を無くすためのコードとして頂いたのですが、これを応用してEnterを押した際にもビープ音を無くそうと試みているのですが、上記の("typed \010")の所に何を指定して良いのかがわかりません。api等でgetKeyStrokeについて調べてみたり、サイトで検索などしてみたのですが、中々ヒントが見つかりません。また、見当違いかもしれませんが以下のようにも書いてみたのですが、結果は変わりません。どなたかご存知の方がいらっしゃいましたらご教授願いたいと思います。宜しくお願い致します。 keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), new DefaultEditorKit.DefaultKeyTypedAction()); 以前の投稿: http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8416&forum=12 [ メッセージ編集済み 編集者: およよ 編集日時 2004-04-04 14:29 ] [ メッセージ編集済み 編集者: およよ 編集日時 2004-04-04 14:30 ] | ||||||||||||
|
投稿日時: 2004-04-04 22:58
このへんが参考になるのかな?
Java Tutrial How to Use Key Bindings API:KeyStroke#getKeyStroke | ||||||||||||
|
投稿日時: 2004-04-05 01:23
かずくん様、ありがとうございます。教えて頂いたページを調べてみます。また結果をご報告したいと思います。
| ||||||||||||
|
投稿日時: 2004-04-06 05:08
こんにちは、さくらばです。
気がつかなくて、すいません。
これであっていると思うのですが、正しく動作しませんか? ところで、私の環境では何もしなくても Enter でビープ音が鳴らないのですが。 Win XP の J2SE 1.4.2_04 と 1.5beta1 で確かめています。 およよさんの環境はどのようになっているのでしょうか? | ||||||||||||
|
投稿日時: 2004-04-06 11:05
さくらば様、ありがとうございます。
こちらの環境としましては、Win2000、JDK1.3.1.10です。 さくらば様にご指摘頂きました、 keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), new DefaultEditorKit.DefaultKeyTypedAction()); ですが、申し訳ありません。私の勘違いか再度、確認したところビープ音は鳴りませんでした。 ただ、以前頂きました以下のコード、 keymap.addActionForKeyStroke(KeyStroke.getKeyStroke("typed \010"), new DefaultEditorKit.DefaultKeyTypedAction()); では、Backspaceキーでビープ音は鳴らなかったのですが、「Enter」と同様に、 keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0), new DefaultEditorKit.DefaultKeyTypedAction()); にするとビープ音が鳴ってしまいます。 また、かずくん様に教えて頂きましたサイトから以下のようなコードを参考にしてみたのですが、
だとビープ音は鳴らないのですが、「typed \010」を「BACK_SPACE」などに変えてみたらうまくいきません。 addActionForKeyStrokeのやり方では、VK_DELETEなどでもうまくいきました。 また、getInputMapの方では、 area.getInputMap().put(KeyStroke.getKeyStroke("DELETE"), "doNothing"); でも上手くいきました。 Backspaceだと何故かうまくいきません。Backspaceの書き方が間違っているのでしょうか? わかりづらい質問で申し訳ありません。 宜しくお願い致します。 | ||||||||||||
|
投稿日時: 2004-04-07 05:08
こんにちは、さくらばです。
そうなんです。私もこれで困っています。 たとえば J2SE のバージョンによっても書き方が異なって、J2SE 1.4 だと上の書き方、 J2SE 1.5 だと下の書き方でないとビープ音が鳴ってしまいます。 ようするに typed \010 でとれる KeyStroke オブジェクトと VK_BACK_SPACE で 取得できる KeyStroke オブジェクトがまったく別物になっていることが問題の ようです。 最後に添付したコードを実行すると
というようになってしまい。 まったく別物と扱われていることが分かると思います。 ちなみに 0xffff は CHAR_UNDEFINED、EventType の 400 が KEY_TYPED、401 が KEY_PRESSED になっています。 それではどうすればいいかというと、結局考えられる KeyStroke を keymap にすべて登録して しまうしかないのではないでしょうか。
| ||||||||||||
|
投稿日時: 2004-04-08 08:55
さくらば様、ありがとうございます。
BackspaceのKeyStrokeの取得にはそのような問題があるのですね。 さくらば様の仰るとおり、とりあえずは考えられるKeyStrokeをKeyMapに登録して作って行こうと思います。 いつも的確なご返答を頂き本当にありがとうございます。 | ||||||||||||
1
