2013-08-06 17 views
8

Używam właściwości JavaFx ObjectProperty w jednej z moich klas. Używam go do funkcji wiązania. Problem polega na tym, że chcę, aby ludzie mogli się z tym wiązać, ale żeby nie zmieniać wartości. Nie mogę wymyślić sposobu, żeby to zrobić w sposób kasty (gdzie ludzie nie będą mieli JAKICHKOLWIEK sposobu na zmianę go z zewnątrz), ale musi być jakiś sposób, aby to zrobić.Ustawienie tylko do odczytu z właściwością JavaFx

Odpowiedz

8

Rozwiązanie

Szukasz w ReadOnlyObjectWrapper.

Próbka

Oto Wykorzystanie przykład zaczerpnięty z sample tic tac toe game który napisałem:

class Square { 

    enum State { EMPTY, NOUGHT, CROSS } 

    private ReadOnlyObjectWrapper<State> state = 
    new ReadOnlyObjectWrapper<>(State.EMPTY); 

    public ReadOnlyObjectProperty<State> stateProperty() { 
    return state.getReadOnlyProperty(); 
    } 

    public State getState() { 
    return state.get(); 
    } 

    public void pressed() { 
    if (!game.isGameOver() && state.get() == State.EMPTY) { 
     state.set(game.getCurrentPlayer()); 
     ... 
    } 
    } 
} 

Objaśnienie

Pozwala to stan Placu być reprezentowane przez własność tak, aby zewnętrzni użytkownicy Kwadratu mogli związać się ze stanem Placu, ale sam stan jest zamknięty w Kwadracie, więc tylko Kwadrat może zmienić swój stan.

Przykład użycia tego wzorca jest obiektem SquareSkin, który zawiera widoczne węzły reprezentujące Kwadrat. Skóra może nasłuchiwać zmian właściwości stanu powiązanego kwadratu i aktualizować obraz, którego używa do odpowiedniego wyświetlania kwadratu.

Aby naprawdę upewnić się, że wartości Obiektów zawartych w ReadOnlyWrapper nie można zmienić zewnętrznie, najlepiej jest wprowadzić wartości Obiektów immutable (np. Obiekty nie mają funkcji ustawiających, a jedynie funkcje pobierające).

Dalsze przykłady

Kod gra I powiązany zawiera wiele innych przykładów różnych wzorów wiążących i zwyczajów (pisałem to częściowo jako ćwiczenie wiązania, aby zobaczyć, co się stanie, jeśli wiele wiązań stosowania w aplikacja).

+0

Ahhh ... To ma sens. Wyglądało na to, że musiał istnieć sposób na zrobienie tego. Dziękuję Ci. –

Powiązane problemy