当在 JTable (称为 gametable )中按下 enter 时,此代码将调用例程。它运行良好,但我希望在 Action 中向上或向下移动时调用相同的 JTable 而无需按 Enter;我无法让它工作。我尝试用 VK_ENTER 替换 VK_UP ,但我无法在 table 上上下移动?

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);

我想不通。有人能帮我吗?

最佳答案

您必须将步骤分开:

  • 首先将两个 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);
    
  • 然后将该 actionMapKey 与您的 Action 相关联:
    gameTable.getActionMap().put(actionMapKey, new AbstractAction(actionMapKey) {
        ...
    });
    

  • 有关详细信息,请参阅 How to Use ActionsKey Bindings

    我对您在这种情况下使用 synchronized (this) 持谨慎态度;您应该在 event dispatch thread 上构建您的 GUI。

    关于java - 在 JTable 中按下向上或向下时调用例程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11916416/

    10-14 10:08