Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按enter键编辑JTable中的特定单元格并显示光标_Java_Swing_Jtable_Keylistener_Tablecelleditor - Fatal编程技术网

Java 按enter键编辑JTable中的特定单元格并显示光标

Java 按enter键编辑JTable中的特定单元格并显示光标,java,swing,jtable,keylistener,tablecelleditor,Java,Swing,Jtable,Keylistener,Tablecelleditor,我已经在JTable on frame中添加了一个keylistner。 现在我有密码了 if (ke.getKeyCode()==10) { int rowIndex = jTable2.getSelectedRow(); int colIndex = jTable2.getSelectedColumn(); jTable2.editCellAt(rowIndex

我已经在JTable on frame中添加了一个keylistner。 现在我有密码了

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

这会编辑单元格,但直到我用鼠标单击它时才会显示光标。不要使用KeyListener

Swing设计为使用键绑定(请参阅上的Swing教程)。也就是说,将动作绑定到击键

默认情况下:

  • Enter
    键将单元格选择移动到下一行
  • F2
    键将单元格置于编辑模式
  • 因此,您希望将Enter键的默认操作替换为F2键的操作。这可以通过使用键绑定轻松完成:

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

    另外,请查看所有Swing组件的默认绑定列表。

    不要使用KeyListener

    Swing设计为使用键绑定(请参阅上的Swing教程)。也就是说,将动作绑定到击键

    默认情况下:

  • Enter
    键将单元格选择移动到下一行
  • F2
    键将单元格置于编辑模式
  • 因此,您希望将Enter键的默认操作替换为F2键的操作。这可以通过使用键绑定轻松完成:

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

    此外,请查看所有Swing组件的默认绑定列表。

    尝试为F2键添加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);
        }
    

    我希望这能起作用。

    尝试为F2键添加机器人:

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

    我希望这能奏效。

    为什么?编辑由
    TabelModel#isEditable
    TableCellEditor#iscelleeditable
    控制,为什么?编辑由
    TabelModel#isEditable
    TableCellEditor#iscelleeditable