Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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:JList ListSelectionListener仅在鼠标上单击_Java_Swing_Jlist - Fatal编程技术网

Java:JList ListSelectionListener仅在鼠标上单击

Java:JList ListSelectionListener仅在鼠标上单击,java,swing,jlist,Java,Swing,Jlist,我对Java还相当陌生,在选择JList组件时,我已经用尽了我的Google’ing来解决这个问题。我有一个字符串列表,当用户单击各种jbutton时,这些字符串会动态变化。My JList selection mode设置为SINGLE_selection,ListSelectionModel注册到实现ListSelectionListener的自定义ListSelectionChangeHandler 我的问题是,每次修改JList模型的内容时(通过单击JButton),都会调用ListSe

我对Java还相当陌生,在选择JList组件时,我已经用尽了我的Google’ing来解决这个问题。我有一个字符串列表,当用户单击各种jbutton时,这些字符串会动态变化。My JList selection mode设置为SINGLE_selection,ListSelectionModel注册到实现ListSelectionListener的自定义ListSelectionChangeHandler

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

相关代码:

}


谢谢你的帮助

我认为,最简单的方法是创建一个切换器-布尔变量,在监听器开始真正执行操作之前,每次都会在监听器中检查该变量。然后,您可以通过关闭此变量来开始所有修改。如果是多线程,您可能需要在此处进行一些同步。

Nevermind。。终于意识到我应该在JList上使用addMouseListener()而不是ListSelectionListener。MouseListener只需检查以确保用户在执行操作之前单击了JList中的有效选择/索引。现在开始工作了。嗨,Jyncus,我也遇到了同样的问题,但是MouseListener似乎没有反应,我能看看你这个方法的实现吗?

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
}