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 { int idx = indexOf(files, file); if (file != null && !contains(files, file)) for (int i, JButton btn : iterateWithIndex(allButtons(buttons()))) setSelected(btn, i == idx); } cachedVisual jHigherScrollPane(jfullcenter(buttons())); swappable void openImage(File f) { showImage(f); } }