java - 以编程方式启用通过击键编辑 JTable 单元格

标签 java swing jtable key-bindings

我希望能够通过按键(例如 F2)编辑 JTable 单元格。

我知道默认情况下双击将启用编辑,但是有没有办法将该事件绑定(bind)到按键?我尝试了这个链接JTable edit on keypress但这对我不起作用。

这是我的代码:

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 用于开始编辑的默认 KeyStroke。

参见Key Bindings查看所有组件使用的所有 KeyStrokes 的表格。您还将找到使用键绑定(bind)的示例。

如果您确实创建了自己的操作,而不是使用提供的操作,那么代码应该类似于:

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

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

因此,一旦按下该键,编辑器就会获得焦点。

显然,Aqua LAF 不绑定(bind) F2,所以看来您需要自己绑定(bind)。假设在 ActionMap 中定义了“startEditing”操作,您可以使用:

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

关于java - 以编程方式启用通过击键编辑 JTable 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851513/

相关文章:

java - 使用 Swing 计时器和 ImageIcons

java - Swing:TableCellRenderer 对某些单元格使用粗体

java - 可以在PC上开发GPS软件吗

java - 在 android studio (1.1.0) 中,如何添加对来自其他来源的 java 文件的依赖?

java - 以编程方式停止 Tomcat 中的 servlet

java - 以编程方式设置 JLabel 文本

java - 样式文本未从 JTextPane 正确保存

java - 将 Jasper 报告中的数字转换为字母

java - 将 JTable 的单元格居中到 JTable 的中间

java - 在JTable中添加3D效果