srecord noeq ScreenSelectorRadioButtons(SimpleLiveValue lvScreenNr) is Swingable { transient ButtonGroup radioButtons; transient SingleComponentPanel scp; settable bool compactLayout; settable S screenLabel = "Screen"; visual swing(-> { if (scp == null) scp = singleComponentPanel(); radioButtons = jRadioButtons( countIteratorAsList(screenCount(), i -> (compactLayout ? "": screenLabel + " ") + (i+1))); setRadioButtonToolTips(radioButtons, i -> "Select screen " + (i+1)); selectRadioButton(radioButtons, lvScreenNr!); onRadioButtonChange(radioButtons, i -> lvScreenNr.set(i)); scp.setComponent(compactLayout ? hstack(flattenList2(nempty(screenLabel) ? jlabel(screenLabel) : null, buttonsInGroup(radioButtons))) : jline(flattenList2(buttonsInGroup(radioButtons)))); ret scp; }); void updateScreenCount() { if (radioButtons != null && radioButtons.getButtonCount() != screenCount()) visualize(); } }