Java 如何使用键盘上的“删除”按钮作为从JTable中删除行的快捷方式

Java 如何使用键盘上的“删除”按钮作为从JTable中删除行的快捷方式,java,swing,jtable,shortcut,Java,Swing,Jtable,Shortcut,可能重复: 精确复制到 我想使用键盘上的Delete按钮从JTable中删除行。我的GUI上有删除按钮,只需要快捷方式。我也击了键,但问题是,当我选择要删除的行时,默认情况下,表中的delete按钮用于输入当前单元格。我想禁用此快捷方式并使用delete按钮删除所选行。这是Swing中一个相对基本的概念 你需要看一看 本质上 InputMap im = table.getInputMap(JTable.WHEN_FOCUSED); ActionMap am = table.getActionM

可能重复:

精确复制到


我想使用键盘上的Delete按钮从JTable中删除行。我的GUI上有删除按钮,只需要快捷方式。我也击了键,但问题是,当我选择要删除的行时,默认情况下,表中的delete按钮用于输入当前单元格。我想禁用此快捷方式并使用delete按钮删除所选行。

这是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上进行测试-工作正常

是什么阻止您删除表中的选定行?代码生成器不是这样吗?为了更好地帮助您尽快发布一个演示过的问题,可能与其他用户重复问题显示了一种通用方法。这是一个不执行删除按钮/操作/击键的问题,但如何实际执行该操作可能是通过使用事件或smth。我已执行了该操作,但当我选择一些行并按delete键时,它会在最后选定的行中输入,而不是删除行。问题是如何禁用已绑定的按钮删除。不,这不是问题;)