可能重复:
如何制作删除按钮来删除 JTable 中的行?
我想使用键盘上的 Delete 按钮从 JTable 中删除行。我的 GUI 上有删除按钮,只需要快捷方式。我也进行了击键,但问题是当我选择要删除的某些行时,实际上默认情况下,表中的删除按钮用于在当前单元格中输入。我想禁用此快捷方式并制作删除按钮以删除选定的行。
可能重复:
如何制作删除按钮来删除 JTable 中的行?
我想使用键盘上的 Delete 按钮从 JTable 中删除行。我的 GUI 上有删除按钮,只需要快捷方式。我也进行了击键,但问题是当我选择要删除的某些行时,实际上默认情况下,表中的删除按钮用于在当前单元格中输入。我想禁用此快捷方式并制作删除按钮以删除选定的行。
这是 Swing 中一个比较基本的概念。
您需要查看如何使用键绑定。
本质上...
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 和 7 上测试 - 工作正常