Copyright Derek O'Reilly, Dundalk Institute of Technology (DkIT), Dundalk, Co. Louth, Ireland.
ScrollPaneDemo Example (Run Applet)
import java.awt.*; import javax.swing.*; public class ScrollPaneDemo extends JApplet { @Override public void init() { this.setContentPane(new View()); } public class View extends JPanel { public View() { super(new BorderLayout()); final Image image = new ImageIcon(getClass().getClassLoader().getResource("images/koala.jpg")).getImage(); final ImagePane imagePane = new ImagePane(image); //Put the imagePane into a scrollPane. final JScrollPane scrollPane = new JScrollPane(imagePane); this.add(scrollPane); } public class ImagePane extends JPanel { private Image image; public ImagePane(Image image) { this.image = image; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // force the ImagePane to be the size of the image setPreferredSize(new Dimension(this.image.getWidth(this), this.image.getHeight(this))); g.drawImage(this.image, 0, 0, this); // force the scroll bars to appear this.revalidate(); } } } }
ScrollPane_Mouse_Demo Example (Run Applet)
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ScrollPane_Mouse_Demo extends JApplet { @Override public void init() { this.setContentPane(new View()); } public class View extends JPanel { public View() { super(new BorderLayout()); final Image image = new ImageIcon(getClass().getClassLoader().getResource("images/koala.jpg")).getImage(); final ImagePane imagePane = new ImagePane(image); // Put the imagePane into a scrollPane. final JScrollPane scrollPane = new JScrollPane(imagePane); imagePane.setScrollPane(scrollPane); // allow the imagePane to access the ScrollPane this.add(scrollPane); } public class ImagePane extends JPanel implements MouseMotionListener, MouseListener { private int curX = 0; private int curY = 0; private int offsetX = 0; private int offsetY = 0; private Image image; private JScrollPane scrollPane; ImagePane(Image image) { this.image = image; this.addMouseListener(this); this.addMouseMotionListener(this); } public void setScrollPane(JScrollPane scrollPane) { this.scrollPane = scrollPane; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // force the ImagePane to be the size of the image this.setPreferredSize(new Dimension(this.image.getWidth(this), this.image.getHeight(this))); g.drawImage(this.image, 0, 0, this); // force the scroll bars to appear this.revalidate(); } @Override public void mouseDragged(MouseEvent e) { final int x = e.getX(); final int y = e.getY(); this.curX -= x - this.offsetX; if (this.curX < 0) { this.curX = 0; } this.curY -= y - this.offsetY; if (this.curY < 0) { this.curY = 0; } this.scrollPane.getViewport().setViewPosition(new Point(this.curX, this.curY)); } @Override public void mouseMoved(MouseEvent me) { } @Override public void mouseClicked(MouseEvent me) { } @Override public void mousePressed(MouseEvent e) { final int x = e.getX(); final int y = e.getY(); this.offsetX = x; this.offsetY = y; } @Override public void mouseReleased(MouseEvent me) { } @Override public void mouseEntered(MouseEvent me) { } @Override public void mouseExited(MouseEvent me) { } } } }
ScrollPane_Scale_Demo Example (Run Applet)
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ScrollPane_Scale_Demo extends JApplet { @Override public void init() { this.setContentPane(new View()); } public class View extends JPanel implements AdjustmentListener { private final JScrollBar scaleBar = new JScrollBar(JScrollBar.VERTICAL, 100, // start at normal size 5, 25, // can scale to 1/4 size 500); // can scale to 5 times bigger private final Image image = new ImageIcon(getClass().getClassLoader().getResource("images/koala.jpg")).getImage(); private final ImagePane imagePane = new ImagePane(image); public View() { super(new BorderLayout()); final JScrollPane scrollPane; //Put this.imagePane into a scrollPane. scrollPane = new JScrollPane(imagePane); imagePane.setScrollPane(scrollPane); // allow the imagePane to access the ScrollPane this.setLayout(new BorderLayout()); this.add("West", this.scaleBar); this.add("Center", scrollPane); this.scaleBar.addAdjustmentListener(this); } @Override public void adjustmentValueChanged(AdjustmentEvent e) { imagePane.setScale((double) this.scaleBar.getValue()); this.repaint(); } public class ImagePane extends JPanel implements MouseMotionListener, MouseListener { private int curX = 0; private int curY = 0; private int offsetX = 0; private int offsetY = 0; private Image image; private JScrollPane scrollPane; private double scale = 100; // initially 100% ImagePane(Image image) { this.image = image; this.addMouseListener(this); this.addMouseMotionListener(this); } public void setScrollPane(JScrollPane scrollPane) { this.scrollPane = scrollPane; } public void setScale(Double scale) { this.scale = scale; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // force the ImagePane to be the size of the image this.setPreferredSize(new Dimension((int) ((double) (this.image.getWidth(this)) * this.scale / 100.0), (int) ((double) (this.image.getHeight(this)) * this.scale / 100.0))); g.drawImage(this.image, 0, 0, (int) ((double) (this.image.getWidth(this)) * this.scale / 100.0), (int) ((double) (this.image.getHeight(this)) * this.scale / 100.0), this); // force the scroll bars to appear this.revalidate(); } @Override public void mouseDragged(MouseEvent e) { final int x = e.getX(); final int y = e.getY(); this.curX -= x - this.offsetX; if (this.curX < 0) { this.curX = 0; } this.curY -= y - this.offsetY; if (this.curY < 0) { this.curY = 0; } this.scrollPane.getViewport().setViewPosition(new Point(this.curX, this.curY)); } @Override public void mouseMoved(MouseEvent me) { } @Override public void mouseClicked(MouseEvent me) { } @Override public void mousePressed(MouseEvent e) { final int x = e.getX(); final int y = e.getY(); this.offsetX = x; this.offsetY = y; } @Override public void mouseReleased(MouseEvent me) { } @Override public void mouseEntered(MouseEvent me) { } @Override public void mouseExited(MouseEvent me) { } } } }
ScrollPane_MouseWheel_Demo Example (Run Applet)
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ScrollPane_MouseWheel_Demo extends JApplet { @Override public void init() { this.setContentPane(new View()); } public class View extends JPanel implements AdjustmentListener { private final JScrollBar scaleBar = new JScrollBar(JScrollBar.VERTICAL, 100, // start at normal size 5, 25, // can scale to 1/4 size 500); // can scale to 5 times bigger private final Image image = new ImageIcon(getClass().getClassLoader().getResource("images/koala.jpg")).getImage(); private final ImagePane imagePane = new ImagePane(image); public View() { super(new BorderLayout()); final JScrollPane scrollPane; //Put this.imagePane into a scrollPane. scrollPane = new JScrollPane(imagePane); imagePane.setScrollPane(scrollPane); // allow the imagePane to access the ScrollPane this.setLayout(new BorderLayout()); this.add("West", this.scaleBar); this.add("Center", scrollPane); this.scaleBar.addAdjustmentListener(this); } @Override public void adjustmentValueChanged(AdjustmentEvent e) { imagePane.setScale((double) this.scaleBar.getValue()); this.repaint(); } public class ImagePane extends JPanel implements MouseMotionListener, MouseListener, MouseWheelListener { private int curX = 0; private int curY = 0; private int offsetX = 0; private int offsetY = 0; private Image image; private JScrollPane scrollPane; private double scale = 100; // initially 100% ImagePane(Image image) { this.image = image; this.addMouseListener(this); this.addMouseMotionListener(this); this.addMouseWheelListener(this); } public void setScrollPane(JScrollPane scrollPane) { this.scrollPane = scrollPane; } public void setScale(Double scale) { this.scale = scale; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // force the ImagePane to be the size of the image this.setPreferredSize(new Dimension((int) ((double) (this.image.getWidth(this)) * this.scale / 100.0), (int) ((double) (this.image.getHeight(this)) * this.scale / 100.0))); g.drawImage(this.image, 0, 0, (int) ((double) (this.image.getWidth(this)) * this.scale / 100.0), (int) ((double) (this.image.getHeight(this)) * this.scale / 100.0), this); // force the scroll bars to appear this.revalidate(); } @Override public void mouseDragged(MouseEvent e) { final int x = e.getX(); final int y = e.getY(); this.curX -= x - this.offsetX; if (this.curX < 0) { this.curX = 0; } this.curY -= y - this.offsetY; if (this.curY < 0) { this.curY = 0; } this.scrollPane.getViewport().setViewPosition(new Point(this.curX, this.curY)); } @Override public void mouseMoved(MouseEvent me) { } @Override public void mouseClicked(MouseEvent me) { } @Override public void mousePressed(MouseEvent e) { final int x = e.getX(); final int y = e.getY(); this.offsetX = x; this.offsetY = y; } @Override public void mouseReleased(MouseEvent me) { } @Override public void mouseEntered(MouseEvent me) { } @Override public void mouseExited(MouseEvent me) { } @Override public void mouseWheelMoved(MouseWheelEvent e) { this.scale += (double) e.getWheelRotation(); // Increment or decrement this.scale this.repaint(); } } } }
Copyright Derek O' Reilly, Dundalk Institute of Technology (DkIT), Dundalk, Co. Louth, Ireland.