Java 如何改变对JTable的关注?

Java 如何改变对JTable的关注?,java,swing,jtable,Java,Swing,Jtable,我已经构建了简单的JavaSwing应用程序。现在在我的JPanel中,我有一些JTextField和一个JTable。 因此,我实现了一个我的自定义焦点,如果焦点在JTextFiled1上,我按ENTER键,那么焦点会自动在JTextFiled2上改变,等等。 接收焦点的最后一个元素是JTable。现在我不想把重点放在第一列,而是放在第四列,所以我有以下代码: textDescrizione.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.V

我已经构建了简单的JavaSwing应用程序。现在在我的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,我会调用一个方法。这也行,但重点仍然放在细胞上

代码如下:

键盘监听器

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

    }
};

tableConti.addKeyListener(new MyKeyListenerSalvataggio());
之后我按F5,方法salva()finish如下:


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

您需要告诉表格停止编辑单元格。有关几种方法,请参见:

  • 在ActionListener中,停止单元格编辑,或
  • 可以将表的属性设置为在失去焦点时停止编辑

  • 关于我的第二个问题,你的回答很好。谢谢你,但是关于第一个问题?@bircastri顺便说一句,不要对F5键使用KeyListener。Swing设计用于键绑定。我不明白你的“第一个问题”。右箭头键只会移动文本字段中的插入符号,它不会将焦点更改为另一个组件。我的第一个问题是,当我单击enter,我在最后一个JTextField上,我的jtable,接收焦点时,我已经编写了代码来执行此操作。我将重点放在JTable第一行的第四列上。现在,如果我想将焦点移到第三列或第五列,我可以使用键盘的右键单击按钮或左键,对吗?所以焦点不是移到第三个或第五个,而是移到第一个column@bircastri,在使用editCellAt(…)方法之前,请尝试在自定义操作中使用JTable的
    changeSelection(…)
    方法。