JavaFX绑定不同类型的列表
如果您有两个不同的列表JavaFX绑定不同类型的列表,java,binding,javafx,bind,Java,Binding,Javafx,Bind,如果您有两个不同的列表 ObservableList<File> ObservableList<Node> observeList 观察者 或者只是 ObservableList<A> ObservableList<B> observeList 您可以收听文件的可观察列表中的更改,并为每个新添加添加相应的图像视图 我创建了一个示例,其中有一个字符串的ObservableList,它是图像的URL的列表。在按钮上单击我添加一个新的URL(地址相
ObservableList<File>
ObservableList<Node>
observeList
观察者
或者只是
ObservableList<A>
ObservableList<B>
observeList
您可以收听文件
的可观察列表
中的更改
,并为每个新添加添加相应的图像视图
我创建了一个示例,其中有一个字符串的ObservableList
,它是图像的URL的列表。在按钮上单击我添加一个新的URL(地址相同)到列表中。我有一个ListChangeListener
,它监听字符串的添加,并为它向VBox
添加一个ImageView
我正在听加法
。您还可以为删除添加
public class Main extends Application {
private final String IMAGE_PATH = "http://i.imgur.com/fcn1bFx.jpg";
private final ObservableList<String> listOfImages = FXCollections.observableArrayList();
@Override
public void start(Stage primaryStage) throws Exception {
ScrollPane pane = new ScrollPane();
VBox box = new VBox();
box.setSpacing(10);
box.setAlignment(Pos.CENTER);
Button button = new Button("Add");
button.setOnAction( e -> {
listOfImages.add(IMAGE_PATH);
});
listOfImages.addListener((ListChangeListener<String>) c -> {
c.next();
if (c.wasAdded()) {
box.getChildren().add(0, new ImageView(c.getAddedSubList().get(0)));
}
});
box.heightProperty().addListener((ov, oldValue, newValue) -> {
pane.setVvalue(pane.getVmax());
});
box.getChildren().add(button);
pane.setContent(box);
Scene scene = new Scene(pane, 500, 500);
primaryStage.setScene(scene);
primaryStage.show();
}
}
您不能对不同类型的ObservableList执行ContentBidirectional
绑定。有没有办法将UI列表和我的自定义列表绑定在一起?为什么要这样做?可能是,如果您让我们知道您试图实现什么,可能有另一种方法。我有一个文件列表,作为数据源。Vbox列出了ImageView和TableView。我想向datasource添加新文件并同步这些列表。我希望绑定能有所帮助。是否要为添加到文件列表中的每个文件向VBox
添加新的ImageView
?
box.getChildren().addListener(new ListChangeListener<Node>() {
@Override
public void onChanged(Change<? extends Node> c) {
c.next();
if(c.wasRemoved()){
listOfImages.remove(c.getList().get(0));
}
}
});