Java:JList ListSelectionListener仅在鼠标上单击
我对Java还相当陌生,在选择JList组件时,我已经用尽了我的Google’ing来解决这个问题。我有一个字符串列表,当用户单击各种jbutton时,这些字符串会动态变化。My JList selection mode设置为SINGLE_selection,ListSelectionModel注册到实现ListSelectionListener的自定义ListSelectionChangeHandler 我的问题是,每次修改JList模型的内容时(通过单击JButton),都会调用ListSelectionChangeHandler并发生NullPointerException—例如,用户在列表中选择了一个项目,单击一个按钮,列表内容会发生更改,侦听器也会被调用。我希望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
谢谢你的帮助 我认为,最简单的方法是创建一个切换器-布尔变量,在监听器开始真正执行操作之前,每次都会在监听器中检查该变量。然后,您可以通过关闭此变量来开始所有修改。如果是多线程,您可能需要在此处进行一些同步。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
}