完全相同
我想使用键盘上的Delete按钮从JTable中删除行。我的GUI上有删除按钮,只想要快捷方式。我也做了击键但问题是,当我选择一些行删除实际上默认情况下在表中删除按钮用于输入当前单元格。我想禁用此快捷方式并使用删除按钮删除所选行。
答案 0 :(得分:4)
这是Swing中一个相对基本的概念。
您需要查看How to Use Key Bindings。
...基本上
InputMap im = table.getInputMap(JTable.WHEN_FOCUSED);
ActionMap am = table.getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "delete");
am.put("delete", new AbstractAction() {
public void actionPerformed(ActionListener listener) {
deleteButton.doClick();
}
});
<强>更新强>
表上没有“默认”删除操作,因此您无法禁用它。主要问题源于表模型和单元格编辑器上的isCellEditable
。在大多数情况下,我通常会将此设置返回true。
在我的Mac上进行测试时,我发现它没有使用VK_DELETE
,而是使用了VK_BACKSPACE
。
一旦我设置了它,它工作得很好......
final MyTestTable table = new MyTestTable(new MyTableModel());
table.setShowGrid(true);
table.setShowHorizontalLines(true);
table.setShowVerticalLines(true);
table.setGridColor(Color.GRAY);
InputMap im = table.getInputMap(JTable.WHEN_FOCUSED);
ActionMap am = table.getActionMap();
Action deleteAction = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("I've being delete..." + table.getSelectedRow());
}
};
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "Delete");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0), "Delete");
am.put("Delete", deleteAction);
setLayout(new BorderLayout());
add(new JScrollPane(table));
<强>已更新强>
在Mac OS 1.7.5,JDK 7,Windows 7,JDK 6&amp; 7 - 工作正常