怎样才能改变焦点在JTable上呢?

How can change the focus on the JTable?

我构建了简单的 java swing 应用程序。现在在我的 JPanel 中,我有一些 JTextField 和一个 JTable。 所以我已经实现了我的自定义焦点,如果焦点在 JTextFiled1 上并且我按 ENTER,焦点会自动更改在 JTextFiled2 等上。 最后一个获得焦点的元素是 JTable。现在我不希望焦点在第一列而是在第四列,所以我有这个代码:

textDescrizione.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "myTabAction");
textDescrizione.getActionMap().put("myTabAction", new AbstractAction("myTabAction") {
    public void actionPerformed(ActionEvent e) {
        tableConti.requestFocus();
        tableConti.editCellAt(0,4);
    }
});

此代码有效,我将焦点放在第四个单元格上,但如果我尝试按键盘上的右键,焦点不在第五列,而是在第一列。 我该如何更改?

另一个问题是,我在我的 JTable 上实现了一个 keyListener,所以如果我尝试在 JTable 获得焦点时按 F5,我会调用一个方法。 thi 也有效,但焦点仍然在单元格上。

这是代码:

keyListener

public class MyKeyListenerSalvataggio extends KeyAdapter{
    public void keyReleased(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_F5){
            salva();
        }

    }
};

tableConti.addKeyListener(new MyKeyListenerSalvataggio());

之后我按了F5,salva()方法结束了,情况是这样的:

如您所见,我无法清除 table 的值,也无法删除单元格上的焦点。

您需要告诉 table 停止编辑单元格。有关几种方法,请参阅 Table Stop Editing

  1. 在 ActionListener 中停止单元格编辑,或者
  2. 您可以设置 table 的 属性 在失去焦点时停止编辑