【问题标题】:Having a String or int with a binding to a Property具有绑定到属性的 String 或 int
【发布时间】:2016-06-11 10:01:30
【问题描述】:

我需要在需要管理电影库的 JavaFX 中编写程序。我有一个由可观察列表填充的表格视图。然后我在属性和表格视图旁边的文本框或标签之间进行了绑定。现在的问题是,我还有与电影相关的图片,比如电影海报。目前我只使用硬编码的:

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

在数据文件中有一列是电影的ID,同样的数字也是它的图片。所以我需要用一个绑定替换示例代码中的“5”,或者当我点击表格视图中的一行时,它会主动更改图片。

我该怎么做?

编辑:

在第一条评论之后,我这样做了:

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

但问题仍然存在

【问题讨论】:

  • 不可能。为此考虑 Image 不可变。但是,您可以替换 ImageView 中显示的 Image...
  • 我改变了它......但我现在该怎么做呢?

标签: java javafx javafx-8


【解决方案1】:

要么为表中的选定项属性添加一个侦听器(我只是在猜测您用于表的模型):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    相关资源
    最近更新 更多