具有绑定到Property的String或int

时间:2016-06-11 10:01:31

标签: java javafx javafx-8

我需要在JavaFX中创建一个我需要管理电影库的程序。我有一个由可观察列表填充的tableview。然后我在tableview旁边的Properties和Textboxes或Labels之间进行了绑定。现在问题是,我还有与电影有关的图片,比如电影海报。目前我只使用硬编码的那个:

imgPoster = new Image(getClass().getResourceAsStream("../resources/images/posters/" + 5 + ".jpg"));

在数据文件中有一列带有电影的ID,同样的数字也是它的图片。因此,我需要使用绑定替换示例代码中的“5”,以便在我单击tableview中的行时立即主动更改图片。

我该怎么做?

编辑:

在第一次评论之后我做到了:

imgOscars = new Image(getClass().getResourceAsStream("../resources/images/oscar/Oscar-logo.png"));
    oscars = new ImageView(imgOscars);
    oscars.setPreserveRatio(true);
    oscars.setFitHeight(45);

但问题仍然存在

1 个答案:

答案 0 :(得分:0)

将一个监听器添加到表中的选定项属性中(我只是猜测您用于表的模型):

TableView<Movie> table = ... ;

table.getSelectionModel().selectedItemProperty().addListener((obs, oldSelectedMovie, newSelectedMovie) -> {
    if (newSelectedMovie == null) {
        oscars.setImage(null);
    } else {
        // get image from new selection
        Image image =  new Image(getClass().getResourceAsStream("../resources/images/oscar/"+newSelectedMoviegetId()+".png")); 
        oscars.setImage(image);
    }
});

或使用绑定:

oscars.imageProperty().bind(Bindings.createObjectBinding(() -> {
    if (table.getSelectionModel().getSelectedItem() == null) {
        return null ;
    } else {
        Movie selected = table.getSelectionModel().getSelectedItem();
        return  new Image(getClass().getResourceAsStream("../resources/images/oscar/"+selected.getId()+".png")); ; 
    }, 
    table.getSelectionModel().selectedItemProperty());