import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java.text.*; public class ViewFrame extends JFrame { private static final double ZOOM_FACTOR = 1.5; private DateFormat dateFormat = new SimpleDateFormat("EEE MMM d yyyy HH:mm"); ImagePanel imgPanel; private JScrollPane scrPanel; private ImageEntry entry = null; public ViewFrame () { this.imgPanel = new ImagePanel(); PanListener.setupPan(imgPanel); imgPanel.setAutoscrolls(true); scrPanel = new JScrollPane(imgPanel, JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); setContentPane(scrPanel); addComponentListener(new ResizeListener()); } public void toggleFullScreen () { GraphicsDevice dev = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); if (dev.isFullScreenSupported()) { if (dev.getFullScreenWindow() == null) { dev.setFullScreenWindow(this); } else { dev.setFullScreenWindow(null); } } else { dispose(); if (isUndecorated()) { setUndecorated(false); } else { setUndecorated(true); setLocation(0, 0); DisplayMode mode = dev.getDisplayMode(); setSize(mode.getWidth(), mode.getHeight()); } show(); } } public void scroll (int dx, int dy) { Rectangle r = new Rectangle(imgPanel.getVisibleRect()); r.x += dx; r.y += dy; imgPanel.scrollRectToVisible(r); } public void zoom1to1 () { imgPanel.setZoom(1.0); } public void zoomIn () { imgPanel.setZoom(imgPanel.getZoom() * ZOOM_FACTOR); } public void zoomOut () { imgPanel.setZoom(imgPanel.getZoom() / ZOOM_FACTOR); } public void rotateCW () { imgPanel.setRotation(imgPanel.getRotation() + 1); fitInFrame(); } public void rotateCCW () { imgPanel.setRotation(imgPanel.getRotation() - 1); fitInFrame(); } public void fitInFrame () { JViewport vp = scrPanel.getViewport(); imgPanel.zoomTo(vp.getWidth(), vp.getHeight()); } public void showImage (ImageEntry entry, int imgIndex, int noOfImgs) { this.entry = entry; StringBuffer newTitle = new StringBuffer(); newTitle.append(entry.getURL().getFile()); newTitle.append(" : "); if (entry.getImage() != null) { newTitle.append(entry.getImage().getWidth()); newTitle.append("x"); newTitle.append(entry.getImage().getHeight()); } else { newTitle.append("could not load"); } newTitle.append(" : [" + (imgIndex+1) + " of " + noOfImgs + "]"); setTitle(newTitle.toString()); if (!isVisible()) { pack(); show(); } imgPanel.setImage(entry.getImage()); imgPanel.setRotation(0); fitInFrame(); } public void toggleDate () { if (imgPanel.getWhatever() == null){ imgPanel.setWhatever(dateFormat.format(entry.getDate())); } else { imgPanel.setWhatever(null); } } private class ResizeListener extends ComponentAdapter { public void componentResized (ComponentEvent e) { fitInFrame(); } } }