2015-04-16 122 views
2

我正在編寫一個代碼,它可以從某些其他代碼的一部分獲取一些布爾值,並相應地在屏幕上更改某些圓的顏色。然而,我遇到了試圖將布爾值綁定到顏色的問題。我結束了這一點:JavaFX將布爾屬性綁定到畫圖

unit1.getNeuron().getWorkingProperty().addListener(new ChangeListener<Boolean>() { 

     @Override 
     public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { 
      if (newValue == Boolean.FALSE) { 
       controller.paint1 = new ObservableValueBase<Paint>() { 

        @Override 
        public Paint getValue() { 
         return Color.RED; 
        } 
       }; 
      } else { 
       controller.paint1 = new ObservableValueBase<Paint>() { 

        @Override 
        public Paint getValue() { 
         return Color.DODGERBLUE; 
        } 
       }; 

      } 
     } 
    }); 
  • ,但我不得不重複了N次我用n個變量。有沒有不同的方式來實現這一點?
+0

用的結合,取決於的狀態返回顏色boolean(創建並設置一個新的Observable on change)順便說一句,很少需要擴展ObservableXXBase - 如果你堅持手動改變一個監聽器的顏色,使用SimpleXXProperty 並設置其值 – kleopatra

回答

4

比方說,你要創建要基於一個ObservableBooleanValue切換的ObservableObjectValue<Paint>,然後Bindings是你的朋友:

final ObservableBooleanValue booleanCondition = unit1.getNeuron().getWorkingProperty(); 
final ObservableObjectValue<Paint> paintProperty = Bindings.when(booleanCondition).then(Color.RED).otherwise(Color.DODGERBLUE); 
+0

你真的應該解釋你的代碼。什麼是'unit1.getNeuron()。getWorkingProperty()'?代碼是做什麼的。如果你不把這段代碼放在一個沒有解釋的問題中,你也不應該在一個答案中。 – user1803551

相關問題