sclass JTargetAndActualSlider extends MetaWithChangeListeners is Swingable { new TargetAndActual data; settable bool sliderEnabled = true; settable double min, max = 100; transient JColorBar bar; transient JSlider slider; double value() { ret data.value(); } cachedVisualize { bar = swing(-> new JColorBar().max(max)); data.varActual().onChangeAndNow(-> bar.setValue(value())); slider = jLiveValueSlider_double_bothWays(data.varTarget()); varSliderEnabled().onChangeAndNow(-> setEnabled(slider, sliderEnabled)); ret vstackWithSpacing(bar, slider); } }