class FrameWithImages { JFrame frame; ImageSurface[] surfaces; int n; *(int numImages) { this(numImages, false); } *(int numImages, boolean scroll) { frame = new JFrame("A JavaX Frame"); n = numImages; JPanel grid = new JPanel(new GridLayout(n, 1)); surfaces = new ImageSurface[n]; for (int i = 0; i < n; i++) { surfaces[i] = new ImageSurface(); grid.add(scroll ? new JScrollPane(surfaces[i]) : surfaces[i]); } frame.add(grid); frame.setBounds(100, 100, 100+400+20, 100+600); } void hop() { frame.setVisible(true); exitOnFrameClose(frame); } void setImage(int i, RGBImage img) { if (i >= 0 && i < n) surfaces[i].setImage(img); } void setImage(int i, BufferedImage img) { if (i >= 0 && i < n) surfaces[i].setImage(img); } void setInnerSize(RGBImage img) { setInnerSize(img.getWidth(), img.getHeight()); } void setInnerSize(int w, int h) { double zoom = surfaces[0].getZoomX(); frame.setSize((int) (w*zoom)+20, (int) (h*zoom*n)+40); // todo... } void setZoom(double zoom) { for (ImageSurface s : surfaces) s.setZoom(zoom); } static void exitOnFrameClose(JFrame frame) { if (!Boolean.TRUE.equals(getOpt(main.class, "_noExit"))) frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } !include #1001101 // getOpt for exitOnFrameClose }