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>