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

标签 java swing jtable arrow-keys

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

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”。

请提供解决方案。

最佳答案

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

  • VK_UP 具有键“Table.selectPreviousRow”

  • VK_DOWN 具有键“Table.selectNextRow”

您可以replaceAction 的绑定(bind)根据需要更新您的 TableModel 的实例。这个example可能会指导你。可以使用引用的键绑定(bind)实用程序获得完整的列表here 。可以在表的 UI 委托(delegate) BasicTableUI 中找到实现。 ,等人。 EditorKit行动,检查here ,也值得一看。或者,考虑在您的 RowSorter 中使用自定义的 Comparator,如 here 所示。 .

关于java - 需要使用键盘上的箭头键处理 JTable 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16318429/

相关文章:

java - 无法在 jaeger ui 中看到服务名称 - Java spring 应用程序

java - 访问私有(private)变量

java - JOGL 2.0 运行稳定的 JAR 文件?

java - 随机错误突出显示导致 JTextPane(阿拉伯语)

java - 如何使 jtable 在 java 中不可编辑?

java - 自定义单元格编辑器行为不正确

Java位操作问题

java - 获取当前正在显示的 JEditorPane

java - 在 ActionListener 中调用对象不起作用,但在对象类 main 中起作用

java - 在 jtable 中设置空日期