Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX绑定不同类型的列表_Java_Binding_Javafx_Bind - Fatal编程技术网

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));
         }
     }
});