我正在使用ListView。向ListView添加新项很容易,但如何删除?
我通过以下方式构建ListView:
public Node buildListView() {
ObservableList<String> myList = FXCollections.observableArrayList();
int counter = 0;
for(int i=0; i<10; i++) {
myList.add("Number " + new Integer(i+1).toString());
}
ListView<String> listView = new ListView<>();
listView.setItems(myList);
listView.setCellFactory(new Callback<ListView<String>, ListCell<String>> (){
@Override
public ListCell<String> call(ListView<String> arg0) {
return new listcells.ListcellY(listView);
}
});
return listView;
}
Listcell Y的一个实例在setGraphics中设置了一个标签。要从我的观察列表中删除与之关联的字符串,我添加了一个MouseEvent处理程序:
public class ListcellY extends ListCell<String> {
Label label;
HBox hbox;
ListView<String> listView;
public ListcellY( ListView<String> listView ) {
super();
this.listView = listView; // Here I pass the reference to my list. Is it a gd way to do that?
}
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if(item!=null){
label = new Label(item);
label.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> {
System.out.println("CLicked on : " + item);
for(String s : listView.getItems()) {
System.out.println(" " + s);
}
listView.getItems().remove(item); // Here I remove the item form my list.
System.out.println("list size : " + listView.getItems().size());
});
setGraphic(label);
}
}
}
虽然这段代码通过从ObservableList中删除每个单击的项目来工作,但listView的行为很奇怪。每次单击标签时,它都会成功地从我的ListView中消失,但会在该ListView的末尾自动添加一个新项目,显示最后一个标签文本的名称(但它不是可单击的标签)。它不断重复,直到我的ObservableList为空。那么ListView不会显示任何内容。
我只是希望我点击的标签消失,而不会在我的树视图中获得任何新的“视觉副本”。如果索引参数设置为ObservableList的原始大小,则ListView将复制最后一个元素,直到获得正确的元素数。但我不明白这是怎么做到的。
我能做什么,首先是怎么回事?
好吧,看来写下你的问题会让你的大脑工作得更好!我有一个正确的直觉:在我的扩展ListCell类中,我在重写的update方法中检查我的项是否不为null。但是当它为null时,我不会处理这种情况,在这种情况下,我必须将图形设置为null!我仍然不明白为什么,但它确实有效!以下是更新的类:
public class ListcellY extends ListCell<String> {
Label label;
HBox hbox;
ListView<String> listView;
public ListcellY( ListView<String> listView ) {
super();
this.listView = listView; // Here I pass the reference to my list. Is it a gd way to do that?
}
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if(item!=null){
label = new Label(item);
label.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> {
System.out.println("CLicked on : " + item);
for(String s : listView.getItems()) {
System.out.println(" " + s);
}
listView.getItems().remove(item); // Here I remove the item form my list.
System.out.println("list size : " + listView.getItems().size());
});
setGraphic(label);
}
else {
setGraphics(null);
}
}
}
在我的应用程序中,左侧有一个,我根据中的选择更新右侧的窗格。一个非常直接的场景。当选择为空时,我会在窗格中显示类似“请进行选择”的消息,即我也会在 ,以防用户单击某些。侦听器还附加到所选的的,以防用户没有单击某些项目,但所选项目的值因某种原因而更改。用户可以通过单击其中的删除按钮来删除特定项目。在任何时候,用户可以点击更新按钮来更新显示当前选择的标签内容,以防我的处理程序错过了一些事件。 在这个简
问题内容: 我有这段代码: 但我得到的结果是: 当然,我期望低于20的数字不会出现在结果中,我假设我对删除操作做错了什么。 问题答案: 在遍历列表时,你正在修改它。这意味着第一次遍历循环时,i==1,因此1从列表中删除。然后for循环转到列表中的第二项,不是2,而是3!然后从列表中删除,然后for循环转到列表中的第三项,现在是5。等等。也许这样更容易想象,用表示的值: 最初是列表的状态;然后删除1
我对下面的Java程序有问题。我在Ubuntu系统上使用带有JDK-1.8u25的JavaFX。我想显示一个ListView,并从列表中删除突出显示的条目。我创建了一个列表,并将其与一个可观察列表配对,以通知侦听器事件。然而,通过删除下面的“orderOvList.remove(i,i 1)”项来更改列表似乎会生成另一个侦听器事件。所以,我似乎在侦听器代码的主体中递归。我想过将list元素从nor
当我更改ListViewAdapter时,我的项目将无法从ListView中清除,并且我有一些空白条目。 她是我的密码:
我正在用C#WPF做一个项目,它包含在一个客户机管理中,在那里我添加了新的客户机,在一个txt文档中有save,我有一个listview,在那里我可以看到所有添加的客户机,但现在我想实现一个delete按钮,在那里我从listview中选择一个客户机,并可以删除它。如果我现在做的正确,如果有人能帮我…,…谢谢。
问题内容: @Entity public class Person { 给定以下类结构,当我尝试将新位置添加到“人的位置”列表中时,它总是导致以下SQL查询: 和 Hibernate(3.5.x / JPA 2)删除给定Person的所有关联记录,然后重新插入所有以前的记录以及新的记录。 我有一个想法,即Location上的equals / hashcode方法可以解决此问题,但是它没有任何改变。