0

我在框架上向 JTable 添加了一个 keylistner。现在在按住我有代码

            if (ke.getKeyCode()==10)
            {
              int rowIndex = jTable2.getSelectedRow();
              int colIndex = jTable2.getSelectedColumn();
              jTable2.editCellAt(rowIndex, colIndex);
              ke.consume();

这确实会编辑单元格,但光标不会显示,直到我用鼠标单击它

4

2 回答 2

5

不要使用 KeyListener!

Swing 被设计为使用键绑定(请参阅关于如何使用键绑定的 Swing 教程)。那就是你将一个动作绑定到一个按键。

默认:

  1. 键将Enter单元格选择移动到下一行
  2. F2键将单元格置于编辑模式

所以你想用F2键的Action替换回车键的默认Action。这很容易通过使用键绑定来完成:

InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
KeyStroke f2 = KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0);
im.put(enter, im.get(f2));

此外,请查看Key Bindings以获取所有 Swing 组件的默认绑定列表。

于 2013-08-20T04:56:42.653 回答
0

尝试为 F2 keyPressed 添加机器人:

if (ke.getKeyCode()==10)
    {
        int rowIndex = jTable2.getSelectedRow();
        int colIndex = jTable2.getSelectedColumn();
        jTable2.editCellAt(rowIndex, colIndex);
        ke.consume();

        Robot pressF2 = null;
        try {
            pressF2 = new Robot();
        } catch (AWTException ex) {
            System.err.println(ex.getMessage());
        }
        pressF2.keyPress(KeyEvent.VK_F2);
    }

我希望这项工作。

于 2017-07-12T21:30:45.850 回答