首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将整数和从映射值绑定到文本属性

将整数和从映射值绑定到文本属性
EN

Stack Overflow用户
提问于 2018-02-10 01:53:58
回答 1查看 537关注 0票数 1

我得到了以下数据模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Player {
  // enum to integer (count)
  @Getter
  private MapProperty<ResourceType, Integer> resourceCards = new SimpleMapProperty<>();

  public void addResource(final ResourceType resourceType, final int amount) {
    this.resourceCards.get().put(resourceType, this.resourceCards.get().get(resourceType) + amount);
  }
}


public class Game {

  @Getter
  @Setter
  private ObjectProperty<Player> currentPlayer = new SimpleObjectProperty<>();

 }

将映射绑定到文本属性非常容易:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final Label label = new Label();
label.textProperty().bind(EasyBind.select(game.getCurrentPlayer()).selectObject(player -> player.getResourceCards().asString()));

我想在标签中显示资源卡的总数。

示例:

地图:{Water=0,Gold=2,Lumber=5}

标签:7

地图:{Water=0,Gold=0,Lumber=0}

标签:0

如何使用JavaFX绑定或/和EasyBind实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-10 05:00:14

MapProperty<S, T>可以用作ObservableMap<S, T>,并得到包装映射更改的通知。这意味着您可以在地图上使用Bindings.createStringBinding

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
label.textProperty().bind(EasyBind.select(game.getCurrentPlayer())
                                  .selectObject(player -> Bindings.createStringBinding(() -> Integer.toString(player.getResourceCards().values().stream().mapToInt(Integer::intValue).sum()),
                                                                                       player.getResourceCards())
                                  .orElse("0")));

注释:返回属性对象本身的方法名称的约定使用<propertyName>Property。如果使用GamecurrentPlayer属性,这将是currentPlayerProperty()而不是getCurrentPlayer(),而不是getResourceCards()。我在上面的代码中使用了包括get在内的方法名。

此外,使用MapProperty是不必要的,除非您计划替换整个映射,而不是简单地修改Map的内容。在本例中,您只需使用ObservableMap类型的只读属性即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48719437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文