transient sclass JGallery is Swingable { L files; gettable File selectedFile; settable bool horizontal = true; simplyCached DynamicStack buttons() { ret horizontal ? makeNiceButtons() : verticalNiceButtons(); } simplyCached ButtonImageLoader imageLoader() { ret new ButtonImageLoader(buttons()); } void setImageFiles(Cl filesCollection) swing { var files = asList(filesCollection); if (eq(this.files, files)) ret; this.files = files; printVars("JGallery.setImageFiles", n2(files)); L l = filesForNiceButtons(files, lambda1 openImage); replaceNiceButtons(buttons(), l); File selectedFile = selectedFile(); //buttonGroup = buttonGroupForAllButtons(buttons()); selectFile(selectedFile); imageLoader().update(); } void selectFile(File file) swing { selectedFile = file; int idx = indexOf(files, file); if (file != null && !contains(files, file)) for (int i, JButton btn : unpair iterateWithIndex(allButtons(buttons()))) { bool selected = i == idx; setSelected(btn, selected); if (selected) { print("Selected button: " + btn); scrollIntoView(btn); } } } cachedVisual jHigherScrollPane(jfullcenter(buttons())); swappable void openImage(File f) { showImage(f); } }