更改项目时删除JavaFx ListView侦听器

更改项目时删除JavaFx ListView侦听器,listview,javafx,listener,Listview,Javafx,Listener,我最近一直面临一个问题;我使用HBox的列表视图来显示文本和复选框。我使用onMouseClicked侦听器在您单击列表中的某个项目时选中复选框。问题是,当我通过清除和设置新项来更改项时,侦听器不再工作。我试图重新设置听者,但没有任何改变。有没有办法解决这个问题 换句话说,我得到了这个。当我点击列表中的某个项目时,它会选中复选框 但是,当我试图更改列表项时,它会删除侦听器。我无法再单击该项目以选中该框。像这样` 我已经在这个函数中添加了一次侦听器: public void ajouterEc

我最近一直面临一个问题;我使用HBox的列表视图来显示文本和复选框。我使用onMouseClicked侦听器在您单击列表中的某个项目时选中复选框。问题是,当我通过清除和设置新项来更改项时,侦听器不再工作。我试图重新设置听者,但没有任何改变。有没有办法解决这个问题

换句话说,我得到了这个。当我点击列表中的某个项目时,它会选中复选框

但是,当我试图更改列表项时,它会删除侦听器。我无法再单击该项目以选中该框。像这样`

我已经在这个函数中添加了一次侦听器:

public void ajouterEcouteur(Interface inter)
{
    inter.list.setOnMouseClicked(new ActionListe());
}

private class ActionListe implements EventHandler<MouseEvent>
{

    @Override
    public void handle(MouseEvent e) 
    {
        Interface temp = listInterfaces.get(vue.tabPane.getSelectionModel().getSelectedIndex());
        int index = temp.list.getSelectionModel().getSelectedIndex();
        if(listHbox.get(index).getChildren().get(0) instanceof CheckBox)
        {
            if(!((CheckBox) listHbox.get(index).getChildren().get(0)).isSelected())
            {
                ((CheckBox) listHbox.get(index).getChildren().get(0)).setSelected(true);
            } else {
                ((CheckBox) listHbox.get(index).getChildren().get(0)).setSelected(false);;
            }
        }
    }

}
public void ajournetuer(接口间)
{
setOnMouseClicked(newActionListe());
}
私有类ActionListe实现EventHandler
{
@凌驾
公共无效句柄(MouseEvent e)
{
Interface temp=listInterfaces.get(vue.tabPane.getSelectionModel().getSelectedIndex());
int index=temp.list.getSelectionModel().getSelectedIndex();
if(listHbox.get(index.getChildren().get(0)instanceof复选框)
{
if(!((复选框)listHbox.get(index).getChildren().get(0)).isSelected())
{
((复选框)listHbox.get(index.getChildren().get(0)).setSelected(true);
}否则{
((复选框)listHbox.get(index.getChildren().get(0)).setSelected(false);;
}
}
}
}
另外,当我像这样在复选框中选择一个项目时,我一直在尝试重新添加侦听器

if(e.getSource() == interface1.cb)
            {
                if(!interface1.list.getItems().isEmpty())
                {
                    ObservableList<HBox> listhbox = interface1.list.getItems();
                    for (HBox hBox : listhbox) {
                        ObservableList<Node> list = hBox.getChildren();
                        if(list.get(0) instanceof CheckBox && ((CheckBox) list.get(0)).isSelected())
                        {
                            interface1.perm.add(((Text) list.get(1)).getText().trim());

                        }
                    }
                }
                interface1.list.setOnMouseClicked(new ActionListe());

                recherchePermissions();
            }
if(e.getSource()==interface1.cb)
{
如果(!interface1.list.getItems().isEmpty())
{
ObservableList listhbox=interface1.list.getItems();
用于(HBox HBox:listhbox){
ObservableList=hBox.getChildren();
if(list.get(0)instanceof CheckBox&((CheckBox)list.get(0)).isSelected())
{
interface1.perm.add(((Text)list.get(1)).getText().trim());
}
}
}
interface1.list.setOnMouseClicked(新建ActionListe());
recherchePermissions();
}
我不知道为什么它不起作用。如果有,请告诉我! 谢谢

-Nic

  • 抱歉的链接,我需要的图像声誉*

你的问题很难回答;特别是,看到一些代码会很有帮助。我建议您阅读,特别是对此感到抱歉,我有一点时间,但我试图用代码和图像尽我所能解释它