使用向上/向下键导航后,jTable错误的Rownumber

时间:2013-08-13 08:30:21

标签: java swing jtable mouseevent key-events

要在jTable中获取所选行,我使用了MouseEvent(MouseClicked)。这很好用,点击进入表格后给我正确的rownumber。

要通过jTable导航,我添加了一个新的监听器(KeyPressed)。如果我按向上键,则rownumber 增加。如果我再次按向上键,行数将会更新,但它是之前的行数。

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”。

3 个答案:

答案 0 :(得分:1)

  

要在jTable中获取所选行,我使用了MouseEvent   (的mouseClicked)。这很好,并给我正确的rownumber   点击进入表格后。

     

为了通过jTable导航,我添加了一个新的Listener(KeyPressed)。如果   我按下向上键,没有增加rownumber。如果我按   再次向上键,rowcount将被更新,但它是rowcount   从以前开始

我认为你需要

答案 1 :(得分:1)

@mKorbel已经发布了正确答案:不要将低级侦听器用于语义要求 - ListSelectionModel / -Event隐藏所有低级别的细节: - )

细节:

  • JTable的内部结构具有改变选择的向上/向下键的键绑定
  • keyBindings 听众
  • 之后提供

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

答案 2 :(得分:-1)

您应该使用KeyReleased代替KeyPressed