禁用Enter键以在JTable中向下移动一行

mal*_*ney 5 java swing jtable keylistener key-bindings

我需要覆盖JTable上的回车键功能.目前,默认行为是当用户按下"Enter"键时将行选择向下移动一行.我想禁用它,让它根据他们的选择做一些不同的事情.问题是它似乎在进入我的keylistener进入行选择之前向下移动 - 因此打开另一个窗口,选择了错误的行.

到目前为止这是我的代码......:

public class MyJTable extends JTable {


   public MyJTable(){
        setRowSelectionAllowed(true);
        addListeners()
    }

    public void addListeners(){

         addKeyListener(new KeyListener() {
                @Override
                public void keyTyped(KeyEvent e) {}

                @Override
                public void keyPressed(KeyEvent e) {}

                @Override
                public void keyReleased(KeyEvent e) {
                    int key = e.getKeyCode();
                    if (key == KeyEvent.VK_ENTER) {

                        openChannel();
                    }
                }
           });
    }

    public void openChannel(){
            for (int selectedRow : getSelectedRows()){
                //Code to open channel based on row selected
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*amp 20

给@Robin的答案+1

添加到我的评论......

Swing用KeyBindingš只需添加一个新的替代exisitng功能KeyBindingJTable(美容原因时JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT):

private void createKeybindings(JTable table) {
table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Enter");
    table.getActionMap().put("Enter", new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            //do something on JTable enter pressed
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

只需调用此方法并传递JTable实例以覆盖标准功能JTable ENTER


Rob*_*bin 5

这是使用键绑定实现的,键绑定比键侦听器更受欢迎。我强烈建议您也这样做:用键绑定替换您的键侦听器。

解决方案是替换 InputMap 中的条目以指向您自己的 Action(您插入到动作映射中),或者仅替换动作映射中的相应条目。

键绑定教程包含更多信息