我需要在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);
但问题仍然存在
答案 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());