在输入键上编辑JTable中的特定单元格并显示光标

时间:2013-08-20 04:08:10

标签: java swing jtable keylistener tablecelleditor

我在框架上为JTable添加了一个密钥列表。 现在关注我有代码

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

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

2 个答案:

答案 0 :(得分:4)

不要使用KeyListener!

Swing旨在使用Key Bindings(参见How to Use Key Bindings上的Swing教程)。那就是你将Action绑定到KeyStroke。

默认情况下:

  1. Enter键会将单元格选择移动到下一行
  2. F2键会将单元格置于编辑模式
  3. 因此,您希望将Enter键的默认Action替换为F2键的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组件的默认绑定列表。

答案 1 :(得分:0)

尝试为F2 keyPressed添加Robot:

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

我希望这项工作。