免责声明:我对JavaFX完全不熟悉。
话虽如此,我正在制作一个奥赛罗游戏,我自然会拥有一个8x8桌面游戏。
我有每个棋盘广场状态的枚举:空,黑,白。
对于每个棋盘广场,我都有一个按钮。我有它可以改变颜色,跟踪转弯等等。我的问题是,我觉得好像我是因为以下原因一起黑客攻击:
我不知道如何正确地将枚举存储到它的相关按钮中。起初我想我会有一个持有按钮和枚举类型(白色,黑色,空)的类。但是,当我使用GridPane时,我无法添加此对象,只能添加对象本身的按钮,从而丢失枚举数据。我可以使用廉价的工作,只需检查特定按钮的CSS样式,并忘记所有的枚举。 (例如,如果颜色是白色,我知道白人玩家有那个特定的方块)。这似乎是错误的方式。
必须有某种类型的集合或类似的东西,我可以用“JavaFX”的方式来做。
如果我不清楚/不够精确,我会接受问题。
提前致谢。
答案 0 :(得分:4)
一个简单的实现是将userData存储到节点:
button.setUserData(enumValue);
从节点中检索userData:
MyEnum enumValue = (MyEnum) button.getUserData();
另一种处理方法是通过子类化将自定义状态添加到按钮:
class Square extends Button {
private ObjectProperty<SquareState> state = new SimpleObjectProperty(
SquareState.EMPTY
);
public ObjectProperty<SquareState> stateProperty() {
return state;
}
public SquareState getState() {
return state.get();
}
public void setState(SquareState newState) {
state.set(newState);
}
}
对于更复杂的mvc样式方法,其中每个项目都有皮肤和内部状态,您可以查看此tic-tac-toe implementation,因为每个项目的内部状态管理在概念上可能类似。