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