这是Swing中一个比较基础的概念。
你需要看看如何使用按键绑定 http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html.
本质上...
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();
}
});
UPDATE
表上没有删除的“默认”操作,因此您无法禁用它。主要问题源于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));
UPDATED
在 Mac OS 1.7.5、JDK 7、Windows 7、JDK 6 和 7 上测试 - 工作正常