- PR -

Appletが開いたときのフォーカスについて

1
投稿者投稿内容
ranran
会議室デビュー日: 2005/01/09
投稿数: 18
投稿日時: 2008-04-16 22:28
まだまだ初心者です。教えてください。

Appletが開いたとき(初期化が終わったあと、有効になっています)、
ボタンなどを押さないと、KeyListenerのようにキー入力が受け付けないようです。
(たとえ、初期化init()で requestFocusInWindowを使っても)

Appletが開いたとき、すぐにキー入力できるように
どのようにすればよいでしょうか?

Frameのように、WindowListenerのwindowOpenedイベントは使えないでしょうか
(windowOpenedの中でrequestFocusInWindowを使えば何かできるような気がして…)

よろしくお願いします。
お散歩
会議室デビュー日: 2008/04/14
投稿数: 6
お住まい・勤務地: 東京都
投稿日時: 2008-04-17 12:03
ranran 様。
はじめまして。

希望する動作としましては、Appletが起動後、自動的にカーソルが
TextField にあり、直ぐ入力できる状態であることと読ませて頂きました。

Applet については私も初心者ですが、
Java重要クラス・リファレンス(2003年5月30日初版発行 発行所 株式会社ナツメ社)の
ColorSender.java というサンプルを参考に以下のコードを作ってみました。
Applet起動後、カーソルが TextField で待機状態にあり、
直ぐキー入力が出来ることも確認しました。

ranran 様 の希望通りかどうかは分かりませんが試してみてください。

import java.applet.Applet;
import java.awt.TextField;
import java.awt.Panel;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class TESTAPP extends Applet implements ActionListener{
TextField t;
Panel p;
public void init(){
t = new TextField(5);
p = new Panel();
p.setLayout(new GridLayout(1, 2));
p.add(t);
setLayout(new GridLayout(1, 1));
add(p);
}
public void actionPerformed(ActionEvent e){
t.getText();
}
}
ranco
大ベテラン
会議室デビュー日: 2007/11/02
投稿数: 112
投稿日時: 2008-04-17 18:54
アプレット上のテキストコンポーネントの動作は、ブラウザの種類やそのバージョン等で異なります。いつも、苦労のタネですね。
ranran
会議室デビュー日: 2005/01/09
投稿数: 18
投稿日時: 2008-04-17 23:01
お散歩さん、ありがとうございます。参考させていただきます。

【環境】サーバ:Linux; クライアント:Windows/XP
【現象】ブラウザーが開く -> Appletをクリック -> Applet有効
    -> ボタンをクリック -> キー・クリック有効
【やりたい事】 ボタンをクリックせずに、キー・クリック有効にすること
【不都合】
      Appletの中に、「前進」と「後退」ボタンがあります。
      それぞれ「↑」と「↓」キーに対応させます。

   Appletが有効になっていますが、一旦「前進」や「後退」ボタンを押さない限り、
   キーが有効になりません。

【ソース摘要】
public class MyApplet extends JApplet implements ActionListener,KeyListener
{
public void init(){
btn.addActionListener(this); // ここで、「前進」「後退」ボタン
addKeyListener(this); // ここで、「↑」「↓」キー
btn.requestFocusInWindow(); // あってもなしでも同じ現象
}
}
【説明】
  上記ソースにおいて、一旦「前進」や「後退」を押すと、後はキーが有効になってい  ることが確認しています。ボタンを押さないと、キーイベントは受け付けてくれま  せん。
   Frameのように、windowOpened()の中に、btn.requestFocusInWindow()を使えば
  できるような気がして(http://java-house.jp/ml/archive/j-h-b/041222.html参   考)
 よろしくお願いします。
ranco
大ベテラン
会議室デビュー日: 2007/11/02
投稿数: 112
投稿日時: 2008-04-18 10:07
これで最初から↓↑は使えますよ。
----------------------------------------------
public class TestApplet extends JApplet implements ActionListener, KeyListener{
JTextField t;
JPanel p;
JButton f, b;

public void init(){
t = new JTextField(12);

p = new JPanel();
p.add(t);
f = new JButton("forward(B)");
b = new JButton("backward(B)");
p.add(f);
p.add(b);

p.addKeyListener(this);

f.addActionListener(this);
b.addActionListener(this);

getContentPane().add(p);

p.requestFocusInWindow();
}

public void actionPerformed(ActionEvent e){
t.setText(((JButton)(e.getSource())).getText());
}

public void keyPressed(KeyEvent e){
int c = e.getKeyCode();
switch (c){
case VK_UP:
t.setText("forward(K)");
break;
case VK_DOWN:
t.setText("backward(K)");
break;
}
}

public void keyReleased(KeyEvent e){
}

public void keyTyped(KeyEvent e){
}
}
---------------------------------------------


[ メッセージ編集済み 編集者: ranco 編集日時 2008-04-18 10:10 ]
ranran
会議室デビュー日: 2005/01/09
投稿数: 18
投稿日時: 2008-04-18 21:02
rancoさん、うまく行きました。
本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)