禁止Enter键在JTable中向下移动 [英] Disable Enter Key from moving down a row in JTable

查看:102
本文介绍了禁止Enter键在JTable中向下移动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要重写JTable上的回车键功能.目前,默认行为是当用户按下"Enter"键时将行选择向下移动一行.我想禁用此功能,并根据其选择使它执行其他操作.问题在于,它似乎在进入进入行选择的键侦听器之前会向下移动-因此,这会打开另一个窗口,并选择了错误的行.

I need to override the enter key functionality on a JTable. At present the default behaviour is to move the row selection down one row when the user presses the 'Enter' key. I want to disable this and get it to do something different based on their selection. The problem is that it seems to move down before it goes into my keylistener which takes in the row selection - this therefore opens another window with the wrong row selected.

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

This is my code so far...:

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
            }
        }
}

推荐答案

+1来@Robin的答案

+1 to @Robin's answer

添加到我的评论中...

Adding to my comment...

Swing使用 KeyBinding s 只是替换现有的功能通过向JTable添加一个新的KeyBinding(之所以发生这种情况是由于JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT造成的):

Swing uses KeyBindings simply replace exisitng functionality by adding a new KeyBinding to JTable (the beauty happens because of 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
        }
    });
}

只需调用此方法并传递JTable实例即可覆盖JTable ENTER

simply call this method and pass JTable instance to override standard functionality of JTable ENTER

这篇关于禁止Enter键在JTable中向下移动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆