gpt4 book ai didi

java - 使用 JavaFx 属性设置为只读

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:47 24 4
gpt4 key购买 nike

我在我的一个类中使用 JavaFx ObjectProperty。我将它用于绑定(bind)功能。问题是我希望人们能够绑定(bind)到它,但不能更改值。我想不出种姓证明方法来做到这一点(人们无法从外部改变它),但必须有某种方法可以做到这一点。

最佳答案

解决方案

您正在寻找 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 的外部用户可以绑定(bind)到 Square 的状态,但状态本身封装在 Square 中,因此只有 Square 可以更改它自己的状态。

此模式的一个用法示例是 SquareSkin 对象,它包含表示 Square 的可见节点。皮肤可以监听相关方 block 状态属性的变化,并更新它用来适当显示方 block 的图像。

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

更多示例

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

关于java - 使用 JavaFx 属性设置为只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18070151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com