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

JavaFX-将数据存储到相应的按钮,java,javafx,Java,Javafx,免责声明:我对JavaFX完全陌生 话虽如此,我正在制作一个奥赛罗游戏,当然我会有一个8x8的棋盘游戏 我有每个棋盘方块状态的枚举:空、黑、白 对于每个方块,我都有一个按钮。我有它,在那里我可以改变颜色,跟踪转弯等。我的问题是,我觉得我好像是因为以下原因而把事情拼凑在一起: 我不知道如何正确地将枚举存储到它的相关按钮。起初我想我应该有一个包含按钮的类和一个枚举类型white,black,empty。但是,当我使用GridPane时,我不能添加这个对象,只能添加对象本身中的按钮,从而丢失枚举数据。

免责声明:我对JavaFX完全陌生

话虽如此,我正在制作一个奥赛罗游戏,当然我会有一个8x8的棋盘游戏

我有每个棋盘方块状态的枚举:空、黑、白

对于每个方块,我都有一个按钮。我有它,在那里我可以改变颜色,跟踪转弯等。我的问题是,我觉得我好像是因为以下原因而把事情拼凑在一起:

我不知道如何正确地将枚举存储到它的相关按钮。起初我想我应该有一个包含按钮的类和一个枚举类型white,black,empty。但是,当我使用GridPane时,我不能添加这个对象,只能添加对象本身中的按钮,从而丢失枚举数据。我可以使用一种廉价的解决方法,只需检查特定按钮的css样式,就可以忘记所有枚举。例如,如果颜色是白色,我知道白色玩家有特定的方块。这似乎是错误的方式

一定有一些收藏之类的东西,我可以用JavaFX的方式来做

如果我不够清楚/准确,我愿意接受问题


提前感谢。

一个简单的实现是将以下内容存储到节点:

button.setUserData(enumValue);
从节点检索用户数据:

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风格的方法,其中每个项目都有一个外观和一个内部状态,您可以查看这一点,因为每个项目的内部状态的管理在概念上可能类似。

一个简单的实现是存储到一个节点:

button.setUserData(enumValue);
从节点检索用户数据:

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风格的方法,其中每个项目都有一个外观和一个内部状态,您可以查看这一点,因为每个项目的内部状态的管理在概念上可能是相似的。

将映射buttonStatus=new HashMap;做这项工作?这会,但以后我会使用蒙特卡罗算法添加人工智能。我希望数据可以轻松复制和操作,以提高树的内存效率。我目前将数据存储在一个多阵列中,以便跟踪合法移动和令牌翻转。我想我正在寻找JavaFX方式,而不仅仅是任何解决方案。不过,我非常感谢您的回复;做这项工作?这会,但以后我会使用蒙特卡罗算法添加人工智能。我希望数据可以轻松复制和操作,以提高树的内存效率。我目前将数据存储在一个多阵列中,以便跟踪合法移动和令牌翻转。我想我正在寻找JavaFX方式,而不仅仅是任何解决方案。不过,我非常感谢您的回复。谢谢您。当我上网寻找解决方案时,我假设ObjectProperty可以帮我解决这个问题,但我不确定如何解决。我意识到它是一个包装器之类的东西,但以这样一种对我有利的方式实现它是值得怀疑的。我将使用这个解决方案,但我感谢所有提供的途径。这就是我一直在找的谢谢你。当我上网寻找解决方案时,我假设ObjectProperty可以帮我解决这个问题,但我不确定如何解决。我意识到它是一个包装器之类的东西,但以这样一种对我有利的方式实现它是值得怀疑的。我将使用这个解决方案,但我感谢所有提供的途径。这就是我要找的