当在 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 Actions 和 Key Bindings。
我对您在这种情况下使用
synchronized (this)
持谨慎态度;您应该在 event dispatch thread 上构建您的 GUI。关于java - 在 JTable 中按下向上或向下时调用例程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11916416/