首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带键盘的Java ListSelectionListener接口

带键盘的Java ListSelectionListener接口
EN

Stack Overflow用户
提问于 2012-08-30 04:32:51
回答 3查看 2K关注 0票数 7

正如您在下面看到的,我已经实现了ListSelectionListener,因此在选择第一个表中的特定行之后,第二个表将相应地更新。

代码语言:javascript
复制
class SelectionListener implements ListSelectionListener {

    public SelectionListener(){}

    @Override
    public void valueChanged(ListSelectionEvent e) 
    {
        if (e.getSource() == myTrumpsAndMessages.jTable1.getSelectionModel() 
            && myTrumpsAndMessages.jTable1.getRowSelectionAllowed()
            && e.getValueIsAdjusting()) 
        {
          int selected = myTrumpsAndMessages.jTable1.getSelectedRow();
            clearjTable(jTable4);
            showSubscribers(selected);
        }
    }

}

有没有一种方法不仅可以在鼠标选择时调用侦听器,也可以在通过键盘进行选择时调用侦听器?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-30 16:58:48

出现这种不寻常体验的原因是,键盘和鼠标触发的选择事件的valueIsAdjusting设置略有不同:

  • 键盘触发选择(即使使用修饰符)仅触发一次(使用调整== false)
  • 鼠标触发选择始终触发两次(第一次使用true,第二次使用false)

这一事实与不同寻常的逻辑相结合( @Robin发现了,+1 to他:-)

代码语言:javascript
复制
if (e.getSource() == myTrumpsAndMessages.jTable1.getSelectionModel() 
        && myTrumpsAndMessages.jTable1.getRowSelectionAllowed()
        // typo/misunderstanding or feature? doing stuff only when adjusting 
        && e.getValueIsAdjusting()) 

(仅当选择正在调整时才进行反应)导致看不到键盘触发的更改。

票数 8
EN

Stack Overflow用户

发布于 2012-08-30 16:18:28

有没有一种方法不仅可以在鼠标选择时调用侦听器,也可以在通过键盘进行选择时调用侦听器?

监听程序将被触发,与选择更改的来源无关。所以,是的,这是完全可能的,甚至是默认行为。因此,不需要做任何特殊的事情来使其正常工作。

查看您的侦听器的代码,我建议将其重写为

代码语言:javascript
复制
class SelectionListener implements ListSelectionListener {
  public SelectionListener(){}
  @Override
  public void valueChanged(ListSelectionEvent e){
    if ( e.getValueIsAdjusting() ){
       return;
    }
    if (e.getSource() == myTrumpsAndMessages.jTable1.getSelectionModel() && 
        myTrumpsAndMessages.jTable1.getRowSelectionAllowed() ) {
      int selected = myTrumpsAndMessages.jTable1.getSelectedRow();
      clearjTable(jTable4);
      showSubscribers(selected);
    }
  }
}

注意当getValueIsAdjusting()返回true时方法的快速中断,因为这是您在大多数情况下想要的行为。

票数 5
EN

Stack Overflow用户

发布于 2012-08-30 04:38:22

我刚刚尝试了一个ListSelectionListenervalueChanged()事件实际上也是在键盘选择更改时触发的。下面是我的例子:

代码语言:javascript
复制
list.addListSelectionListener(new ListSelectionListener() {
  public void valueChanged(ListSelectionEvent e) {
    System.out.println(list.getSelectedValue());
  }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12186054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档