3

このコードは、 (と呼ばれる)enterで が押されたときにルーチンを呼び出します。うまく機能しますが、を押す必要なく上または下に移動するときに同じものを呼び出したいと思います。私はそれを働かせることができません。で代用してみたのですが、表の上下が動かないのですが?JTablegametableActionJTableenterVK_ENTERVK_UP

KeyStroke enter = KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ENTER, 0);

gameTable.getJTable().unregisterKeyboardAction(enter);
gameTable.getJTable().registerKeyboardAction(new ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent e) {
            synchronized (this) {
                gotoGame(gameTable.getSelectedIndex());
            }
        }
    }, enter, JComponent.WHEN_FOCUSED);

私はそれを理解することはできません。誰かが私を助けることができますか?

4

2 に答える 2

3

手順を分ける必要があります。

  1. 最初に に 2 つのKeyStrokeインスタンスを配置しInputMapて、同じ をターゲットにするようにしactionMapKeyます。

    KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
    KeyStroke up = KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0);
    String actionMapKey = "anActionMapKey";
    gameTable.getInputMap().put(enter, actionMapKey);
    gameTable.getInputMap().put(up, actionMapKey);
    
  2. 次に、それをあなたに関連付けactionMapKeyますAction

    gameTable.getActionMap().put(actionMapKey, new AbstractAction(actionMapKey) {
        ...
    });
    

詳細については、アクションキー バインドの使用方法を参照してください。

synchronized (this)この文脈での の使用には注意が必要です。イベント ディスパッチ スレッドで GUI を構築する必要があります。

于 2012-08-11T18:37:36.943 に答える
0

JTable にキーリスナーを追加する必要があります。次に、キーリスナーで、Enter を含む押されたボタンを確認して、同じアクションを実行できます。

同様のコードのプログラムがあります。ここでは、矢印キーで別のセルを選択すると、1 つのテキストエリアに別の値を表示するだけですが、設定方法がわかると思います。

import java.awt.event.KeyEvent;

import javax.swing.JTable;

public class MyClass {
    static JTable table = new JTable();

    public static void main(String[] args) {
        table.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(final java.awt.event.KeyEvent evt) {
                tableKeyReleased(evt);
            }
        });
    }

    private static void tableKeyReleased(final java.awt.event.KeyEvent evt) {
        final int key = evt.getKeyCode();
        if (key == KeyEvent.VK_UP || key == KeyEvent.VK_DOWN
                || key == KeyEvent.VK_LEFT || key == KeyEvent.VK_RIGHT) {
            final int row = table.getSelectedRow();
            final int column = table.getSelectedColumn();

            final Object cellValue = table.getValueAt(row, column);

            if (cellValue == null) {
                return;
            }

        }
    }
}
于 2012-08-11T18:36:54.513 に答える