2016-06-25 2 views
0

免責事項:私はJavaFXを全く新しくしています。JavaFX - 対応するボタンにデータを保存

私はオセロゲームを作っていますが、もちろん私は8x8ボードゲームを持っています。

私は各ボードの正方形の状態の列挙型を持っています:空、黒、白。

ボードスクエアごとにボタンがあります。私は色を変えたり、ターンの経過を追跡したりすることができます。私の問題は、以下の理由で一緒にハッキングしているように感じます。列挙型の関連するボタンです。最初はボタンと列挙型(白、黒、空)を保持するクラスがあると思いました。しかし、GridPaneを使用すると、このオブジェクトを追加することはできませんが、オブジェクト自体のボタンだけが追加され、列挙型データが失われます。私は安価な作品を使用して、特定のボタンのCSSスタイルをチェックして、列挙型をすべて一緒に忘れることができます。 (例えば、色が白ならば、私は白いプレーヤーがその特定の四角形を持っていることを知っています)。これは間違った方法のようです。

"JavaFX"のやり方には何らかのコレクションが必要です。私は十分に正確な/クリアされていないんだ場合、私は疑問に開いている

..事前に

感謝。

+0

マップ buttonStatus =新しいHashMap ();仕事をする ? – c0der

+0

これは、私がモンテカルロアルゴリズムを使ってAIを追加することになるでしょう。私は、ツリーのメモリ効率のために簡単にコピーして操作するデータが必要です。私は現在、データを複数の配列に格納しているので、法的な動きとトークンの反転を追跡できます。 これは、「JavaFX」のやり方を、どんなソリューションよりも探していると思います。私はあなたの返事に感謝します。 – mKDoodle

答えて

1

単純な実装は、ノードに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を確認できます。

+0

ありがとうございました。私はObjectPropertyが私のためにトリックをすることができたと仮定していました。私はソリューションのためにサーフィンしましたが、どうやってどうやっているのか分かりませんでした。私はそれがラッパーであることに気付きましたが、私にとって有益だったような方法で実装することは疑問でした。私はその解決法を使用しますが、私はすべての道を与えていただきありがとうございます。 これは私が探していたものです – mKDoodle

関連する問題