Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列表选择侦听器值已更改激发超过2次_Java_Swing_Jtable_Listselectionlistener - Fatal编程技术网

Java 列表选择侦听器值已更改激发超过2次

Java 列表选择侦听器值已更改激发超过2次,java,swing,jtable,listselectionlistener,Java,Swing,Jtable,Listselectionlistener,我在单击选项卡时添加listselectionlistener table1 = new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { action(e); } }; ListSelectionModel SM = table1A.getSelectionModel(); SM.addListSelectionListener(table1); SM = table1B.g

我在单击选项卡时添加listselectionlistener

table1 = new ListSelectionListener()
{
  public void valueChanged(ListSelectionEvent e)
  {
    action(e);
  }
};
ListSelectionModel SM = table1A.getSelectionModel();
SM.addListSelectionListener(table1);
SM = table1B.getSelectionModel();
SM.addListSelectionListener(table1);
当我单击表的行时,action(e)函数多次启动

private void action(ListSelectionEvent e)
{
  ListSelectionModel lsm = (ListSelectionModel) e.getSource();

  if (lsm.getValueIsAdjusting())
  {
   // nothing
  }
  else
  {
   // my action here
  }
}
动作(e)应该触发两次,一次是鼠标单击时,一次是鼠标释放时。我必须使用getValueIsAdjusting()来阻止鼠标单击,因此我的操作应该运行一次。但是,我的动作运行了很多次。我可以看到这一点,因为我需要在我的操作中放置一个繁忙的对话框。

您需要将“值正在调整”设置为true

 SM.setValueIsAdjusting(true);

请将SM重命名为SM,因为java属性应该以小写字母开头。(java约定)

我想您正在考虑使用
鼠标侦听器<代码>列表选择侦听器
s侦听对所选内容的更改,而不是鼠标单击和释放。这些可能是非常不同的事情;SM.addListSelectionListener(表1);SM=table1B.getSelectionModel();SM.addListSelectionListener(表1)似乎添加了两次侦听器!为了更快地获得更好的帮助,发布一个(最小、完整、可验证的示例)。我需要在哪里设置它?在ListSelectionModel SM=table1A.getSelectionModel()下;