1

W簡単に言うと、Java アプレットに、 、ASまたはDを押したときに、実際にはupdownleft、またはをそれぞれ押していると認識させたいと考えていますright

どうすればこれを行うことができますか?

アクティブ化/非アクティブ化ボタンをオンにしたシンプルな小さな GUI を作成しますが、プログラムがどのように Java アプレットを騙すのかわかりません。

4

2 に答える 2

1

キーバインディングを使用する必要があります。

基本的に、キーをアクションに「バインド」します。たとえば、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();
    }
}
于 2013-01-08T05:40:09.233 に答える
0

キーバインディングはあなたが求めているものでなければなりません。

于 2013-01-08T05:16:27.570 に答える