我必须根据键盘上按下的上/下箭头键上下移动单元格。我在KeyListener
上添加了KeyAdapter
(事实上JTable
),以使用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”。
请为此提供解决方案。
答案 0 :(得分:2)
不要使用KeyListener
;使用Key Bindings。 JTable
在WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
输入映射中具有以下默认绑定:
VK_UP
有密钥"Table.selectPreviousRow"
VK_DOWN
的密钥为"Table.selectNextRow"
。
您可replace根据需要更新TableModel
Action
个实例的绑定。或者,考虑Comparator
中的自定义RowSorter
,如图here所示。