JavaFX 不同类型列表的bindContent双向

标签 java binding javafx bind

如果您有两个不同的列表。

ObservableList<File>
ObservableList<Node>

或者只是

ObservableList<A>
ObservableList<B>

如何将它们绑定(bind)在一起?有没有任何变换或类似的东西?

谢谢。

Referal - https://stackoverflow.com/a/29320895/1347177

最佳答案

您可以监听FilesObservableList中的更改,并为每个新添加添加相应的ImageView > 到VBox

我创建了一个示例,其中有一个字符串的 ObservableList,它是图像 URL 的列表。单击按钮,将新 URL(地址相同)添加到列表中。我有一个 ListChangeListener ,它监听字符串的添加,并为其添加一个 ImageViewVBox

我正在听Addition。您也可以添加删除

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

不是双向绑定(bind),但可以满足您的需求。

此外,您还可以向VBox添加Listener,并对ObservableList进行相应的更改。

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

关于JavaFX 不同类型列表的bindContent双向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29321851/

相关文章:

wpf - DynamicResource 绑定(bind)到 Color 不起作用

java - IntelliJ + Gradle + JavaFX 构建,但未运行

java - 未添加按钮

java - 如何为外部世界 REST 服务创建 REST 客户端

java - 您已在存储库中定义查询方法,但未定义任何查询查找策略。 Spring

java - 我必须在 onCreate 中调用 (admob) loadAd 吗?

c# - 将 ListView 与来自 ViewModel 的 List 绑定(bind)

wpf - Bing map - 图钉的自动更新位置绑定(bind)

java - JavaFX 的 OutOfBoundsException

java - 使用 Jolokia 监控同一 Tomcat 服务器上 webapp 的 JMX 端点