2016-06-25 2 views
0

Отказ от ответственности: Я совершенно не знаком с JavaFX.JavaFX - Сохранение данных соответствующей кнопке

С учетом сказанного, я делаю игру Othello, естественно, у меня будет 8х8 настольная игра.

У меня есть перечисления для состояния каждой площади доски: пустой, черный, белый.

Для каждой площади правления у меня есть кнопка. У меня есть, где я могу изменить цвет, следить за поворотами и т. Д. Моя проблема в том, что я делаю взламывание вещей по следующей причине:

Я не знаю, как магазин перечислить его связанную кнопку. Сначала я решил, что у меня будет класс, в котором есть кнопка и тип перечисления (белый, черный, пустой). Однако, когда я использую GridPane, я не могу добавить этот объект, но только кнопку в самом объекте, тем самым теряя данные перечисления. Я мог бы использовать дешевую работу и просто проверить стиль css определенной кнопки и забыть о перечислениях вместе. (Например, если цвет белый, я знаю, что белый игрок имеет этот конкретный квадрат). Это кажется неправильным.

Должна быть какая-то коллекция или понравится, где я могу сделать это «JavaFX».

Я открыт для вопросов, если я не быть ясно/достаточно точный ..

Заранее спасибо.

+0

Будет ли Map buttonStatus = new HashMap (); выполнять работу ? – c0der

+0

Это было бы, но позже по дороге я буду добавлять ИИ с использованием алгоритма Монте-Карло. Я хочу, чтобы данные были легко скопированы и обработаны для эффективности памяти дерева. В настоящее время я храню данные в массиве с несколькими массивами, поэтому я могу отслеживать правовые перемещения и токены. Это, и я полагаю, что я ищу путь «JavaFX» больше, чем любое решение. Однако я благодарю вас за ваш ответ. – mKDoodle

ответ

1

Простая реализация для хранения userData к узлу:

button.setUserData(enumValue); 

Retrieve 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