【问题标题】:need to handle JTable's rows using arrow keys from the keyboard需要使用键盘上的箭头键处理 JTable 的行
【发布时间】:2013-05-01 12:51:29
【问题描述】:

我必须根据从键盘上按下的向上/向下箭头键来向上/向下移动单元格。我在JTable 上添加了KeyListener(实际上是KeyAdapter)以使用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”。

请提供解决方案。

【问题讨论】:

    标签: java swing jtable arrow-keys


    【解决方案1】:

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

    • VK_UP 拥有密钥"Table.selectPreviousRow"

    • VK_DOWN 拥有密钥"Table.selectNextRow"

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 2018-06-30
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多