1

我必须根据从键盘按下的向上/向下箭头键来向上/向下移动单元格。我正在添加一个KeyListener(实际上KeyAdapterJTable使用该方法来实现它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”。

请提供解决方案。

4

1 回答 1

4

不要使用KeyListener; 使用键绑定。在输入映射JTable中具有以下默认绑定:WHEN_ANCESTOR_OF_FOCUSED_COMPONENT

  • VK_UP有钥匙"Table.selectPreviousRow"

  • VK_DOWN有钥匙"Table.selectNextRow"

您可以根据需要将绑定替换Action为更新您的实例TableModel。这个例子可以指导你。使用此处引用的键绑定实用程序可以获得完整的列表。可以在表的 UI 委托中找到实现BasicTableUI,等等。此处EditorKit检查的操作也值得一看。或者,在您的 中考虑一个自定义,如此所示。ComparatorRowSorter

于 2013-05-01T20:56:02.747 回答