Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Q)TAB$B%-!<2!2<$rJa$i$($?$$!%(B

12 views
Skip to first unread message

Kiyomi Yamazaki

unread,
Dec 8, 2003, 2:41:12 AM12/8/03
to
こんにちは、ヤマザキともうします.

早速ですが質問です.

現在、JDK 1.3を使用してIEのみを対象とした
アプレットを作成していますが、キーイベントでTABキーが
通知されません.

enableEvent()でキーイベントを有効にして、
processKeyEventを実装しています.
TABキー以外が押下されると、processKeyEvent()が呼ば
れるのですが、TABキーでは呼ばれません.

確かにTABキーはコントロールのフォーカス移動に使用さ
れているようですが、アプレットでTABキーを捕らえることは
できないのでしょうか?!

どなたか、情報お持ちでしたら、教えていただければ幸です.

以上、よろしくお願いいたします.


Iwao Watanabe

unread,
Dec 10, 2003, 8:41:33 PM12/10/03
to
こんにちは。

"Kiyomi Yamazaki" <kiy...@sendai.ai-com.co.jp> wrote
in message news:br19pm$ms8$1...@nn-tk103.ocn.ad.jp...

> 現在、JDK 1.3を使用してIEのみを対象とした
> アプレットを作成していますが、キーイベントでTABキーが
> 通知されません.

(snip)

Microsoft Windows の Internet Explorer でJDK1.3ということなら
Sunのプラグインを利用されているということでしょうか。

java.applet.Applet クラスのPeerな実装は
TABキーを始めとするほとんどのキーに反応するようですが、
それとは別の java.awt.Component のPeer は
実装によって特定のキー入力が反応しない
ということが昔から知られています。



> enableEvent()でキーイベントを有効にして、
> processKeyEventを実装しています.
> TABキー以外が押下されると、processKeyEvent()が呼ば
> れるのですが、TABキーでは呼ばれません.

実際に試されたコードが示されていないので単なる予測ですが
反応しないのならそういうものでしょう。

TABコードをどうしても取得したければ、
java.awt.Panel か java.awt.Canvas あたりを使って
自分で適当なGUIを作るしかないです。


Kiyomi Yamazaki

unread,
Dec 11, 2003, 9:09:44 PM12/11/03
to
Iwao Watanabeさん、情報ありがとうございます.

> Microsoft Windows の Internet Explorer でJDK1.3ということなら
> Sunのプラグインを利用されているということでしょうか。

●そのとおりです.

> 実際に試されたコードが示されていないので単なる予測ですが
> 反応しないのならそういうものでしょう。
●はしょると、次のようなソースです.

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class test4 extends Applet
{
public void init()
{
super.init();
enableEvents( AWTEvent.KEY_EVENT_MASK );
}
public void processKeyEvent( KeyEvent e )
{
System.out.println( "キーイベント" );
}
public void paint( Graphics gs ) {
}
public void update( Graphics gs ) {
}
}

TABキー以外では、『キーイベント』と表示されますが、TABキーでは
表示されません.

あきらめるしかないのでしょうか...


Iwao Watanabe

unread,
Dec 15, 2003, 10:38:20 PM12/15/03
to
こんにちは。

"Kiyomi Yamazaki" <kiy...@sendai.ai-com.co.jp> wrote in message news:brb7qs$djb$1...@nn-tk102.ocn.ad.jp...

>
> > Microsoft Windows の Internet Explorer でJDK1.3ということなら
> > Sunのプラグインを利用されているということでしょうか。
> ●そのとおりです.

私の手元で次のコードを Windows版 Sun J2SE の
java version "1.4.1_02-er" の状態で試してみました。

public class Applet3 extends java.applet.Applet {
public void init() {
enableEvents( java.awt.AWTEvent.KEY_EVENT_MASK );
}
public void processKeyEvent( java.awt.event.KeyEvent e ) {
System.out.println(e);
}
}

appletviewer、IE プラグインのどちらも
「a」「b」「c」とタイプすると、コンソールに次のように表示されます。
ちなみに「tab」を押しても何も反応しません。

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=65,keyChar='a',keyLocation=KEY_LOCAT
ION_STANDARD] on panel0
java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyChar='a',keyLocation=KEY_LOCATION
_UNKNOWN] on panel0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=65,keyChar='a',keyLocation=KEY_LOCA
TION_STANDARD] on panel0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=66,keyChar='b',keyLocation=KEY_LOCAT
ION_STANDARD] on panel0
java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyChar='b',keyLocation=KEY_LOCATION
_UNKNOWN] on panel0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=66,keyChar='b',keyLocation=KEY_LOCA
TION_STANDARD] on panel0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=67,keyChar='c',keyLocation=KEY_LOCAT
ION_STANDARD] on panel0
java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyChar='c',keyLocation=KEY_LOCATION
_UNKNOWN] on panel0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=67,keyChar='c',keyLocation=KEY_LOCA
TION_STANDARD] on panel0

同じクラスファイルをIE内蔵のMicrosoft VM 5.0.0 で試してみると
期待したtabキーのイベントが取得できます。

VMの実装によって違いがあるとみなすしかないですね。

Kiyomi Yamazaki

unread,
Dec 17, 2003, 12:57:56 AM12/17/03
to
Iwao Watanabeさん、返信ありがとうございます.

>
> 私の手元で次のコードを Windows版 Sun J2SE の
> java version "1.4.1_02-er" の状態で試してみました。
>
> public class Applet3 extends java.applet.Applet {
> public void init() {
> enableEvents( java.awt.AWTEvent.KEY_EVENT_MASK );
> }
> public void processKeyEvent( java.awt.event.KeyEvent e ) {
> System.out.println(e);
> }
> }
>
> appletviewer、IE プラグインのどちらも
> 「a」「b」「c」とタイプすると、コンソールに次のように表示されます。
> ちなみに「tab」を押しても何も反応しません。
●ですよね~

> 同じクラスファイルをIE内蔵のMicrosoft VM 5.0.0 で試してみると
> 期待したtabキーのイベントが取得できます。
>
> VMの実装によって違いがあるとみなすしかないですね。

●そうなんですか.

結局、ちぐはぐな環境になりますが、徐々(?)にSDK 1.4へ移行する
することが認められ、その最初として今回のアプレットを1.4で作成
しました. で、もって1.4のメソッド
setFocusTraversalKeys( KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
Collections.EMPTY_SET );
setFocusTraversalKeys( KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
Collections.EMPTY_SET );
を使用して、強引に解決ということにしました.

JREはもともと1.4だったので...

以上、大変ありがとうございました.


0 new messages