Java:仅在鼠标单击时使用JList ListSelectionListener

时间:2011-03-19 05:08:48

标签: java swing jlist

我对Java很新,并且在JList组件上选择时已经用尽了谷歌来解决这个问题。我有一个字符串列表,当用户单击各种JButton时,它会动态更改。我的JList选择模式设置为SINGLE_SELECTION,ListSelectionModel注册到实现ListSelectionListener的自定义ListSelectionChangeHandler。

我的问题是,每次修改JList模型的内容(通过单击JButton),ListSelectionChangeHandler都会被调用并发生NullPointerException - 例如用户在列表中选择了一个项目,单击一个按钮,列表内容发生变化,并且监听器被调用。我希望ListSelectionListener仅在MouseClick触发事件时执行某些操作。当模型数据被修改时,如何防止我的侦听器触发?

相关守则:


this.suggestionsList = new JList();
this.suggestionsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

ListSelectionModel model = this.suggestionsList.getSelectionModel(); model.addListSelectionListener(new ListSelectionChangeHandler());

class ListSelectionChangeHandler implements ListSelectionListener {

@Override public void valueChanged(ListSelectionEvent arg0) { Object selectedValue = suggestionsList.getSelectedValue(); // Perform action on selectedValue // Enable/Disable components as needed }
@Override public void valueChanged(ListSelectionEvent arg0) { Object selectedValue = suggestionsList.getSelectedValue(); // Perform action on selectedValue // Enable/Disable components as needed }

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我能想到的最简单的方法是制作一个切换器 - 布尔变量,每次在你的监听器开始真正做某事之前都会检查它。然后,您可以通过关闭此变量来启动所有修改。在多线程的情况下,您可能需要在这里进行一些同步。