JavaFX - 将数据存储到相应的按钮

时间:2016-06-25 03:14:00

标签: java javafx

免责声明:我对JavaFX完全不熟悉。

话虽如此,我正在制作一个奥赛罗游戏,我自然会拥有一个8x8桌面游戏。

我有每个棋盘广场状态的枚举:空,黑,白。

对于每个棋盘广场,我都有一个按钮。我有它可以改变颜色,跟踪转弯等等。我的问题是,我觉得好像我是因为以下原因一起黑客攻击:

我不知道如何正确地将枚举存储到它的相关按钮中。起初我想我会有一个持有按钮和枚举类型(白色,黑色,空)的类。但是,当我使用GridPane时,我无法添加此对象,只能添加对象本身的按钮,从而丢失枚举数据。我可以使用廉价的工作,只需检查特定按钮的CSS样式,并忘记所有的枚举。 (例如,如果颜色是白色,我知道白人玩家有那个特定的方块)。这似乎是错误的方式。

必须有某种类型的集合或类似的东西,我可以用“JavaFX”的方式来做。

如果我不清楚/不够精确,我会接受问题。

提前致谢。

1 个答案:

答案 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,因为每个项目的内部状态管理在概念上可能类似。