我最近遇到了一个问题;我使用HBox的ListView来显示文本和CheckBox。当您单击列表中的某个项目时,我正在使用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);;
}
}
}
}
此外,当我在这样的复选框中选择一个项目时,我一直在尝试添加监听器。
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();
}
我不知道为什么它不起作用。如果你这样做,请告诉我! 谢谢 !
-nic