これは、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 を返すように設定しています。
VK_DELETE
Mac でテストしているときに、 を使用せず、代わりに使用していることがわかりました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 でテスト - 正常に動作