需要使用键盘上的箭头键来处理JTable的行

时间:2013-05-01 12:51:30

标签: java swing jtable arrow-keys

我必须根据键盘上按下的上/下箭头键上下移动单元格。我在KeyListener上添加了KeyAdapter(事实上JTable),以使用keyPressed()方法实现它。现在发生的事情是,当我按下字母数字键时,我可以使用table.getSelectedRow()获取所选行,但是当我按下箭头键时,它总是给我“-1”。这意味着没有选择显示行。我也试图将焦点放在桌子上,但它没有用。我使用的代码如下:

private void settingKeys() {
    controller.getStandardActionDetailsTableEquates().addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {

            System.out.println("key pressed!!");
            controller.getStandardActionDetailsTableEquates().setRowSelectionAllowed(true);
            int selectedRow = controller.getStandardActionDetailsTableEquates().getSelectedRow();
            System.out.println("selectedRow : " + selectedRow);

            controller.getStandardActionDetailsTableEquates().requestFocusInWindow();

            if (e.getKeyCode() == KeyEvent.VK_UP) {
                System.out.println("up arrow key pressed");

                Component editor = controller.getStandardActionDetailsTableEquates().getEditorComponent();
                editor.requestFocusInWindow();
                System.out.println("cursor : " + controller.getStandardActionDetailsTableEquates().getCursor());
                System.out.println("value : " + controller.getStandardActionDetailsTableEquates().getSelectedRow());

            } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                System.out.println("down arrow key pressed");
            }

        }
    });
}

我甚至试图获得光标位置,但无法获得它。此外,编辑器发现没有工作(在代码中显示)。 “选定的行”和“值”值正在变为“-1”。

请为此提供解决方案。

1 个答案:

答案 0 :(得分:2)

不要使用KeyListener;使用Key BindingsJTableWHEN_ANCESTOR_OF_FOCUSED_COMPONENT输入映射中具有以下默认绑定:

  • VK_UP有密钥"Table.selectPreviousRow"

  • VK_DOWN的密钥为"Table.selectNextRow"

您可replace根据需要更新TableModel Action个实例的绑定。或者,考虑Comparator中的自定义RowSorter,如图here所示。