-1

重複の可能性:
JTable の行を削除する削除ボタンを作成するには?

JTableの行を削除するための削除ボタンを作成する方法に正確に複製しますか?

キーボードの [削除] ボタンを使用して、JTable から行を削除したいと考えています。GUI に削除ボタンがあり、ショートカットのみが必要です。また、キーストロークを作成しましたが、問題は、実際に削除する行を選択すると、デフォルトでテーブルの削除ボタンが現在のセルに入力するために使用されることです。このショートカットを無効にして、選択した行を削除する削除ボタンを作成します。

4

1 に答える 1

5

これは、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_DELETEMac でテストしているときに、 を使用せず、代わりに使用していることがわかりました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 でテスト - 正常に動作

于 2012-11-05T20:03:46.823 に答える