Java 以编程方式启用在击键时编辑JTable单元格

Java 以编程方式启用在击键时编辑JTable单元格,java,swing,jtable,key-bindings,Java,Swing,Jtable,Key Bindings,我希望能够在一个键上编辑一个JTable单元格,比如F2 我知道默认情况下双击将启用编辑,但有没有办法将该事件绑定到键?我尝试了这个链接,但它不适合我 这是我的密码: public class DatabaseJTable extends JTable implements MouseListener { public DatabaseJTable(Object [][] data, Object [] columnNames) { super(data, columnN

我希望能够在一个键上编辑一个JTable单元格,比如F2

我知道默认情况下双击将启用编辑,但有没有办法将该事件绑定到键?我尝试了这个链接,但它不适合我

这是我的密码:

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;
    }
}

提前感谢。

F2已经是JTable开始编辑时使用的默认按键

有关所有组件使用的所有击键的表,请参阅。您还将找到使用键绑定的示例

如果您确实创建了自己的操作,而不是使用“提供”操作,那么代码应该如下所示:

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

if (editCellAt(row, column))
{
    Component editor = table.getEditorComponent();
    editor.requestFocusInWindow();
}
因此,一旦按下该键,编辑器将获得焦点

显然,Aqua-LAF不结合F2,所以看起来你需要自己做。假设在ActionMap中定义了“startEditing”操作,您可以使用:

KeyStroke keyStroke = KeyStroke.getKeyStroke("F2");
InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
im.put(keystroke, "startEditing");

作为参考,
com.apple.laf.AquaLookAndFeel
没有将
F2
(或任何键)绑定到
开始编辑
@trashgod,有趣的是,是否定义了开始编辑操作?感谢您提供的信息。我有个小问题。双击单元格也会触发编辑。有没有办法禁用该选项,以便只有F2可以触发编辑?@ightbringer使用()此鼠标事件或以某种方式覆盖它不是一个好主意,您可以将DefaultCellEditor#setClickCountToStart(int)更改为合理的数字4-5,让这个加速器可以从鼠标事件访问。原因是我想双击一行打开一个新面板,F2编辑该行。谢谢你的建议,我试试看。