【问题标题】:java DefaultListModeljava DefaultListModel
【发布时间】:2011-05-11 13:29:09
【问题描述】:
if(incasationBegin > 0)
{
  int anwser = JOptionPane.showConfirmDialog(null, Config.QUESTION,"Confirm", JOptionPane.YES_NO_OPTION);
  if(anwser == 1)
  {
      jList0.setSelectedIndex(incasationBegin);
      return;
  }
}
incasationBegin = jList0.getSelectedIndex();

我如何setSelectedIndex 不调用 jList0ListSelectionValueChanged 操作?因为当我点击选项确认弹出窗口时,当我点击否时,新项目仍然被选中。我曾尝试在返回之前添加incasationBegin =0;,但在第一次点击确认弹出窗口时。

【问题讨论】:

  • 即使有代码和解释,我仍然不关注你。您能否详细说明或使您的解释更清晰/简洁?
  • 在调用jList0.setSelectedIndex(incasationBegin); 这个动作之后jList0ListSelectionValueChanged 被调用了,我不想这样,有可能吗??
  • 好吧,只要选择/取消选择,就会触发valueChanged。所以,不希望这种情况发生似乎很不自然。无论如何,稍微浏览一下就找到了以下链接 - stackoverflow.com/questions/3092834/…

标签: java swing


【解决方案1】:

让我看看我是否理解正确。您正在向JList 添加ListSelectionListener 并希望阻止您对setSelectedIndex 的调用触发valueChanged 事件,是这样吗?

您可以在这里尝试很多不同的方法:

  1. 延迟您对jList0.addListSelectionListener(... 的呼叫,这样当您呼叫setSelectedIndex 时不存在侦听器。
  2. 让侦听器valueChanged 方法检查某些“启用条件”,例如读取boolean isEnabled。在调用 setSelectedIndex 之前将此条件设置为 false,之后设置为 true。
  3. 在拨打setSelectedIndex之前先拨打jList0.removeListSelectionListener(..。通话后再次将监听器添加到列表中。

【讨论】:

    猜你喜欢
    • 2014-07-13
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多