【问题标题】:jTable wrong Rownumber after navigate with up / down Keys使用向上/向下键导航后 jTable 错误的行号
【发布时间】:2013-08-13 08:30:21
【问题描述】:

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

为了在 jTable 中导航,我添加了一个新的侦听器 (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”。

【问题讨论】:

  • 在您的关键监听器上,您是否调用int index = myTable.getSelectedRow()>0?myTable.getSelectedRow()-1:0;myTable.setRowSelectionInterval(index, index); 来选择上一行? (或类似的东西)。请包含一些代码,以便更清楚地了解您当前正在做什么,以便我们找出原因。
  • 你尝试过什么吗?您能否添加一个简短的可执行代码,如果没有^^,真的很难帮助您。
  • 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”。

标签: java swing jtable mouseevent key-events


【解决方案1】:

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

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

.

我认为你需要

【讨论】:

    【解决方案2】:

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

    详情:

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

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

    【讨论】:

      【解决方案3】:

      您应该使用KeyReleased 而不是KeyPressed

      【讨论】:

        猜你喜欢
        • 2011-01-02
        • 2021-11-07
        • 1970-01-01
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-06
        • 1970-01-01
        相关资源
        最近更新 更多