- - PR -
Appletが開いたときのフォーカスについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-04-16 22:28
まだまだ初心者です。教えてください。
Appletが開いたとき(初期化が終わったあと、有効になっています)、 ボタンなどを押さないと、KeyListenerのようにキー入力が受け付けないようです。 (たとえ、初期化init()で requestFocusInWindowを使っても) Appletが開いたとき、すぐにキー入力できるように どのようにすればよいでしょうか? Frameのように、WindowListenerのwindowOpenedイベントは使えないでしょうか (windowOpenedの中でrequestFocusInWindowを使えば何かできるような気がして…) よろしくお願いします。 |
|
投稿日時: 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(); } } |
|
投稿日時: 2008-04-17 18:54
アプレット上のテキストコンポーネントの動作は、ブラウザの種類やそのバージョン等で異なります。いつも、苦労のタネですね。
|
|
投稿日時: 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参 考) よろしくお願いします。 |
|
投稿日時: 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 ] |
|
投稿日時: 2008-04-18 21:02
rancoさん、うまく行きました。
本当にありがとうございました。 |
1