Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要处理JTable';使用键盘上的箭头键移动行_Java_Swing_Jtable_Arrow Keys - Fatal编程技术网

Java 需要处理JTable';使用键盘上的箭头键移动行

Java 需要处理JTable';使用键盘上的箭头键移动行,java,swing,jtable,arrow-keys,Java,Swing,Jtable,Arrow Keys,我必须根据键盘上按下的向上/向下箭头键向上/向下移动单元格。我正在JTable上添加一个KeyListener(实际上是KeyAdapter),以使用keyPressed()方法实现它。现在发生的是,当我按下字母数字键时,我可以使用table.getSelectedRow()获取所选行,但当我按下箭头键时,它总是给我“-1”。这意味着没有显示选定的行。我也试着把焦点放在桌子上,但没用。我使用的代码如下: private void settingKeys() { controller.ge

我必须根据键盘上按下的向上/向下箭头键向上/向下移动单元格。我正在
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”


请提供解决方案。

不要使用
键侦听器
;使用
JTable
在聚焦组件的输入映射的
中具有以下默认绑定:

  • VK\u UP
    具有键
    “Table.selectPreviousRow”

  • VK\u DOWN
    有键
    “Table.选择nextrow”

您可以根据需要使用更新
TableModel
的实例创建绑定。这可能会指引你。可以使用引用的密钥绑定实用程序获得完整的列表。实现可以在表的UI委托等中找到。所检查的操作也值得一看。或者,在代码< >行排序器< /C>中,考虑一个自定义<代码>比较器< /代码>,如图所示。< /P>