我对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
}
感谢您的帮助!
答案 0 :(得分:0)
我能想到的最简单的方法是制作一个切换器 - 布尔变量,每次在你的监听器开始真正做某事之前都会检查它。然后,您可以通过关闭此变量来启动所有修改。在多线程的情况下,您可能需要在这里进行一些同步。