使用JavaFx属性设置只读

时间:2013-08-06 00:54:02

标签: java javafx

我在我的一个类中使用JavaFx ObjectProperty。我正在使用它来绑定绑定功能。问题是我希望人们能够绑定它,但不能改变它的价值。我不能想到一种种姓证明方式(人们不会有任何方式从外面改变它),但必须有一些方法来做到这一点。

1 个答案:

答案 0 :(得分:8)

解决方案

您正在寻找ReadOnlyObjectWrapper

示例

以下是我写的sample tic tac toe game的示例用法:

class Square {

  enum State { EMPTY, NOUGHT, CROSS }

  private ReadOnlyObjectWrapper<State> state = 
    new ReadOnlyObjectWrapper<>(State.EMPTY);

  public ReadOnlyObjectProperty<State> stateProperty() {
    return state.getReadOnlyProperty();
  }

  public State getState() {
    return state.get();
  }

  public void pressed() {
    if (!game.isGameOver() && state.get() == State.EMPTY) {
      state.set(game.getCurrentPlayer());
      ...
    }
  }
}

说明

这允许Square的状态由属性表示,以便Square的外部用户可以绑定到Square的状态,但状态本身被封装在Square中,因此只有Square可以改变它自己的状态。

此模式的用法示例是SquareSkin对象,其中包含表示Square的可见节点。皮肤可以侦听相关方块状态属性的更改,并更新用于正确显示方块的图像。

要真正确保ReadOnlyWrapper中包含的Object值不能在外部更改,最好使这些Object值immutable(例如,Objects没有setter函数,只有getter函数)。

更多示例

我链接的游戏代码包含许多不同绑定模式和用法的其他示例(我将其部分编写为绑定练习,以了解如果在应用程序中使用大量绑定会发生什么)。