我尝试使用按钮上的简单事件处理程序将名称(字符串)应用到JavaFX中的ListView中,从TextFields接收输入。所有字段似乎都正常工作,它只是没有更新到列表视图
private ListView<String> manifestList;
manifestList = new ListView<>();
manifestList.setId("List");
manifestList.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
ListView添加方法:
public void addtoList(String manifestlist){
manifestList.getItems().add(manifestlist);
}
用于生成输入文本框的循环(我已将其预设为name1,name2等进行测试)
for( i = 0;i < editname.length;i++){
editname[i] = new TextField("Name" + i);
}
按钮处理程序,用于将文本字段中的文本添加到列表视图(有16个文本框)
Button add = new Button("add");
add.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
for(i=0; i<16; i++){
test.addtoList(editname[i].getText());
}
}
});
test是我调用add方法的类的变量名,列表视图位于该类中。调用add方法的按钮位于不同的场景/类中。
我无法弄清楚这里出了什么问题,我已经将文本字段的值打印到控制台并且它们打印得很好 - 但是它们不会更新到ListView中。
我尝试在列表视图中使用带有预设字符串的add方法,并且添加正常。
任何帮助/提示都会非常感谢。
答案 0 :(得分:2)
制作全球ObservableList
名称,例如items
:
//create an ObservableList
ObservableList<String> items = FXCollections.observableArrayList();
然后以ObservableList
的每次更新都反映回ListView<String> manifestList;
manifestList.setItems(items);
现在每次您想要在ListView
添加新项目ObservableList
。所以你的方法可以修改为:
public void addtoList(String manifestlist){
items.add(manifestlist);
}
请看下面的链接:
以及Oracle Bro的教程: