我必须根据键盘上按下的向上/向下箭头键向上/向下移动单元格。我在 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 Bindings 。 JTable
在 WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
输入映射中具有以下默认绑定(bind):
VK_UP
具有键“Table.selectPreviousRow”
VK_DOWN
具有键“Table.selectNextRow”
。
您可以replace与 Action
的绑定(bind)根据需要更新您的 TableModel
的实例。这个example可能会指导你。可以使用引用的键绑定(bind)实用程序获得完整的列表here 。可以在表的 UI 委托(delegate) BasicTableUI
中找到实现。 ,等人。 EditorKit
行动,检查here ,也值得一看。或者,考虑在您的 RowSorter
中使用自定义的 Comparator
,如 here 所示。 .
关于java - 需要使用键盘上的箭头键处理 JTable 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16318429/