2013-08-06 19 views
8

Sınıflarımdan birinde bir JavaFx ObjectProperty kullanıyorum. Bağlantı özellikleri için kullanıyorum. Sorun şu ki, insanların ona bağlanabilmelerini, ancak değeri değiştirmemelerini istiyorum. Bunu yapmak için kasti bir kanıtlama yolu düşünemiyorum (insanların dışarıdan değiştirmek için HERHANGİ bir yolu olmayacakları), ancak bunu yapmanın bir yolu olmalı.Yalnızca bir JavaFx özelliği ile okunan ayar

cevap

8

Çözüm

Sen ReadOnlyObjectWrapper arıyoruz. Bu temsil olmak Square durumunu sağlar

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()); 
     ... 
    } 
    } 
} 

Açıklama

: Burada örnek

yazdım sample tic tac toe game alınan bir örnek kullanımıdır Bir mülkün dış kullanıcıları Kare'nin devletine bağlanabilsin diye bir mülk, ancak devletin kendisi de meydanda kapsüllenir. Kare kendi devletini değiştirebilir.

Bu desen için bir kullanım örneği, Kare'yi temsil eden görünür düğümleri içeren bir SquareSkin nesnesidir. Cilt, ilgili karenin durum özelliğindeki değişiklikleri dinleyebilir ve kareyi uygun şekilde görüntülemek için kullandığı görüntüyü güncelleyebilir.

Gerçekten de ReadOnlyWrapper öğesindeki Nesne değerlerinin değiştirilemediğinden emin olmak için, bu Nesne değerlerinin immutable (örneğin, Nesnelerin ayarlayıcı işlevi yoktur, yalnızca alıcı işlevleri vardır) olması en iyisidir.

Başka Örnekler

ben bağlantılı oyun kodu farklı bağlama modelleri ve kullanımlarının diğer birçok örnekler içerir (Ben bir in bağları bir çok kullanırım ne olacağını görmek için bir bağlanma egzersiz kısmen yazdım Uygulama).

+0

10 Ahhh ... Bu tamamen mantıklı. Bunu yapmanın bir yolu olmalıydı. Teşekkür ederim. –