早速ですが質問です.
現在、JDK 1.3を使用してIEのみを対象とした
アプレットを作成していますが、キーイベントでTABキーが
通知されません.
enableEvent()でキーイベントを有効にして、
processKeyEventを実装しています.
TABキー以外が押下されると、processKeyEvent()が呼ば
れるのですが、TABキーでは呼ばれません.
確かにTABキーはコントロールのフォーカス移動に使用さ
れているようですが、アプレットでTABキーを捕らえることは
できないのでしょうか?!
どなたか、情報お持ちでしたら、教えていただければ幸です.
以上、よろしくお願いいたします.
"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を作るしかないです。
> 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キーでは
表示されません.
あきらめるしかないのでしょうか...
"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の実装によって違いがあるとみなすしかないですね。
> 同じクラスファイルを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だったので...
以上、大変ありがとうございました.