1

为了在 jTable 中获取选定的行,我使用了 MouseEvent ( MouseClicked)。这很好用,并在点击表格后给我正确的行号。

为了在 jTable 中导航,我添加了一个新的 Listener ( KeyPressed)。如果我按向上键,则不会增加行号。如果我再次按向上键,行数将被更新,但它是之前的行数。

private void jTable1KeyPressed(java.awt.event.KeyEvent evt) { 
    if(evt.getKeyCode() == evt.VK_UP){
     System.out.println("Key UP" + jTable1.getSelectedRow()); 
    } 

    if(evt.getKeyCode() == evt.VK_DOWN){ 
    System.out.println("Key DOWN" + jTable1.getSelectedRow()); 
    }
}

这是简单的代码。如果我单击表格的第一行并按下向下键,则输出为“Key DOWN0”。但是第二行被选中,输出应该是“Key DOWN1”。

4

3 回答 3

1

为了在 jTable 中获取选定的行,我使用了 MouseEvent (MouseClicked)。这很好用,并在点击表格后给我正确的行号。

为了在 jTable 中导航,我添加了一个新的 Listener (KeyPressed)。如果我按向上键,则不会增加行号。如果我再次按向上键,行数将被更新,但它是之前的行数

.

我认为你需要

于 2013-08-13T08:49:48.087 回答
1

@mKorbel 已经发布了正确答案:不要使用低级侦听器来满足语义要求 - ListSelectionModel/-Event 隐藏了所有低级 knitty-gritty 细节 :-)

细节:

  • JTable 的内部对改变选择的向上/向下键有 keyBindings
  • keyBindings在侦听器之后提供

因此,在您的应用程序代码看到该事件时,该表还没有机会做出反应 - 您正在打印的是其内部更改之前的选择(由绑定触发)。

于 2013-08-13T13:54:26.800 回答
-1

你应该使用KeyReleased而不是KeyPressed

于 2017-05-15T09:02:54.713 回答