1

F2 などのキーで JTable セルを編集できるようにしたいと考えています。

デフォルトでダブルクリックすると編集が有効になることは知っていますが、そのイベントをキーにバインドする方法はありますか? キープレスでこのリンクJTable editを試しましたが、うまくいきません。

これが私のコードです:

public class DatabaseJTable extends JTable implements MouseListener {
    public DatabaseJTable(Object [][] data, Object [] columnNames) {
        super(data, columnNames);
        InputMap inputMap = this.getInputMap(JComponent.WHEN_FOCUSED);
        ActionMap actionMap = this.getActionMap();
        this.addMouseListener(this);

    // bind edit record to F2 key
        inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0), "edit");
        actionMap.put("edit", new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                // TODO Auto-generated method stub
                DatabaseJTable table = (DatabaseJTable)ae.getSource();
                table.changeSelection(table.getSelectedRow(), 1, false, false);
                table.editCellAt(table.getSelectedRow(), 1);
                System.out.println("F2 pressed");
            }
        });
    // binding delete record to Delete key
        inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "delete");
        actionMap.put("delete", new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                // TODO Auto-generated method stub

            }
        });
    }

    @Override
    public boolean isCellEditable(int row, int column) {
       return false;
    }
}

前もって感謝します。

4

1 に答える 1

4

F2 は、JTable が編集を開始するために使用するデフォルトの KeyStroke です。

すべてのコンポーネントで使用されるすべての KeyStrokes の表については、キー バインディングを参照してください。また、キー バインドの使用例もあります。

提供するアクションを使用する代わりに、独自のアクションを作成する場合、コードは次のようになります。

int row = table.getSelectedRow();
int column = table.getSelectedColumn();

if (editCellAt(row, column))
{
    Component editor = table.getEditorComponent();
    editor.requestFocusInWindow();
}

そのため、キーが押されると、エディターはフォーカスを取得します。

どうやら Aqua LAF は F2 をバインドしないので、自分で行う必要があるようです。「startEditing」アクションが ActionMap で定義されていると仮定すると、次を使用できます。

KeyStroke keyStroke = KeyStroke.getKeyStroke("F2");
InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
im.put(keystroke, "startEditing");
于 2013-11-08T04:27:01.553 に答える