W
簡単に言うと、Java アプレットに、 、A
、S
またはD
を押したときに、実際にはup
、down
、left
、またはをそれぞれ押していると認識させたいと考えていますright
。
どうすればこれを行うことができますか?
アクティブ化/非アクティブ化ボタンをオンにしたシンプルな小さな GUI を作成しますが、プログラムがどのように Java アプレットを騙すのかわかりません。
キーバインディングを使用する必要があります。
基本的に、キーをアクションに「バインド」します。たとえば、W
キーとUP
キーをボタンの「押された」アクションにバインドする場合は、次のように記述します。
button.getInputMap().put(KeyStroke.getKeyStroke("W"), "pressed");
button.getInputMap().put(KeyStroke.getKeyStroke("UP"), "pressed");
そして、「押された」が何をすべきかを定義するには、それに対応するアクションを追加する必要があります。
button.getActionMap().put("pressed", changeTextAction);
changeTextAction
を拡張するクラスのインスタンスである必要がありますAbstractAction
。例えば:
public class ChangeTextAction extends AbstractAction
{
private JButton button;
private String text;
public ChangeTextAction(JButton button, String text)
{
this.button = button;
this.text = text;
}
@Override
public void actionPerformed(ActionEvent e)
{
button.setText(text);
}
}
以下は、ユーザーが をクリックするか、 を押すかW
、または を押しUP
て、テキストを「Pressed!」に変更するアクションをトリガーできるようにする基本的なプログラムの例です。
import javax.swing.*;
import java.awt.event.ActionEvent;
class KeyBindingExample extends JFrame
{
private JButton button;
private Action changeTextAction;
public KeyBindingExample()
{
button = new JButton("Not Pressed!");
changeTextAction = new ChangeTextAction(button, "Pressed!");
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("W"), "pressed");
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("UP"), "pressed");
button.getActionMap().put("pressed", changeTextAction);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(button);
pack();
setVisible(true);
}
public class ChangeTextAction extends AbstractAction
{
private JButton button;
private String text;
public ChangeTextAction(JButton button, String text)
{
this.button = button;
this.text = text;
}
@Override
public void actionPerformed(ActionEvent e)
{
button.setText(text);
}
}
public static void main(String[] args)
{
new KeyBindingExample();
}
}
キーバインディングはあなたが求めているものでなければなりません。