我正在我的一个类中使用JavaFx ObjectProperty.我正在使用它来绑定绑定功能.问题是我希望人们能够绑定它,但不能改变它的价值.我不能想到一种种姓证明方式(人们不会有任何方式从外面改变它),但必须有一些方法来做到这一点.
解
您正在寻找ReadOnlyObjectWrapper.
样品
以下是我编写的样本tic tac toe游戏的示例用法:
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());
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
说明
这允许Square的状态由属性表示,以便Square的外部用户可以绑定到Square的状态,但状态本身被封装在Square中,因此只有Square可以改变它自己的状态.
此模式的用法示例是SquareSkin对象,其中包含表示Square的可见节点.皮肤可以侦听关联方块的状态属性的更改,并更新它用于适当显示方块的图像.
为了确保ReadOnlyWrapper中包含的Object值不能在外部更改,最好使这些Object值不可变(例如,Objects没有setter函数,只有getter函数).
更多例子
我链接的游戏代码包含许多其他不同绑定模式和用法的示例(我将其部分编写为绑定练习,以了解如果在应用程序中使用大量绑定会发生什么).
| 归档时间: |
|
| 查看次数: |
2694 次 |
| 最近记录: |