• 締切済み

アプレットのキーボード入力において

Dosプロンプトよりアプレットを起動して、キーボード入力によるアクションの実行時がうまく動作しません。 例えばAとBのボタンを作成してBボタンにショートカットを設定します。 この場合Aボタンをクリックしてからでないとショートカットが有効になりません。(アプレット自体をクリックしてからでも駄目です。) テキストフィールドにキーボード入力によるアクションはまったく反応しません。

みんなの回答

  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.1

 KeyListenerは、それを登録したコンポーネントにフォーカスがあるときにしかキーイベントを送付しません。 よって、常にキーイベントを受け取りたい場合は、 そのリスナをフォーカスを獲得する可能性があるすべてのコンポーネットに登録しておかなければなりません。 下の例では、AのショートカットはAボタンのみに、Bのショートカットはすべてに登録してあります。 import java.awt.*; import java.awt.event.*; class keyinframe extends Frame implements ActionListener { private Button BA, BB; private Label LB; private TextField TF; private int Cnt; class keyA extends KeyAdapter { public void keyPressed(KeyEvent ke) { if (ke.getKeyCode() == KeyEvent.VK_A) actionPerformed(new ActionEvent(this, 0, "A")); }; } class keyB extends KeyAdapter { public void keyPressed(KeyEvent ke) { if (ke.getKeyCode() == KeyEvent.VK_B) actionPerformed(new ActionEvent(this, 0, "B")); }; } public keyinframe() { super("Key Input"); setSize(320, 240); setLayout(new GridLayout(4, 1)); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); }; }); add(BA = new Button("A")); add(BB = new Button("B")); add(LB = new Label("Start")); add(TF = new TextField()); BA.addActionListener(this); BA.setActionCommand("A"); keyA KA = new keyA(); BA.addKeyListener(KA); BB.addActionListener(this); BB.setActionCommand("B"); keyB KB = new keyB(); BA.addKeyListener(KB); BB.addKeyListener(KB); TF.addKeyListener(KB); Cnt = 0; }; public void actionPerformed(ActionEvent ae) { String s = ae.getActionCommand(); if (s.compareTo("A") == 0) s = "A"; else if (s.compareTo("B") == 0) s = "B"; else s = ""; LB.setText(s + Integer.toString(Cnt ++)); }; } public class keyinput { public static void main(String args[]) { keyinframe MF = new keyinframe(); MF.setVisible(true); }; };