Java tutorial
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Point; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.InputMap; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JViewport; import javax.swing.KeyStroke; public class MoveViewSample { public static final int INCREASE = 0; // direction public static final int DECREASE = 1; // direction public static final int X_AXIS = 0; // axis public static final int Y_AXIS = 1; // axis public static final int UNIT = 0; // type public static final int BLOCK = 1; // type static class MoveAction extends AbstractAction { JViewport viewport; int direction; int axis; int type; public MoveAction(JViewport viewport, int direction, int axis, int type) { if (viewport == null) { throw new IllegalArgumentException("null viewport not permitted"); } this.viewport = viewport; this.direction = direction; this.axis = axis; this.type = type; } public void actionPerformed(ActionEvent actionEvent) { Dimension extentSize = viewport.getExtentSize(); int horizontalMoveSize = 0; int verticalMoveSize = 0; if (axis == X_AXIS) { if (type == UNIT) { horizontalMoveSize = 1; } else { // type == BLOCK horizontalMoveSize = extentSize.width; } } else { // axis == Y_AXIS if (type == UNIT) { verticalMoveSize = 1; } else { // type == BLOCK verticalMoveSize = extentSize.height; } } if (direction == DECREASE) { horizontalMoveSize = -horizontalMoveSize; verticalMoveSize = -verticalMoveSize; } // Translate origin by some amount Point origin = viewport.getViewPosition(); origin.x += horizontalMoveSize; origin.y += verticalMoveSize; // Set new viewing origin viewport.setViewPosition(origin); } } public static void main(String args[]) { JFrame frame = new JFrame("JViewport Sample"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Icon icon = new ImageIcon("yourFile.gif"); JLabel dogLabel = new JLabel(icon); JViewport viewport = new JViewport(); viewport.setView(dogLabel); InputMap inputMap = viewport.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); ActionMap actionMap = viewport.getActionMap(); Action upKeyAction = new MoveAction(viewport, DECREASE, Y_AXIS, UNIT); KeyStroke upKey = KeyStroke.getKeyStroke("UP"); inputMap.put(upKey, "up"); actionMap.put("up", upKeyAction); Action downKeyAction = new MoveAction(viewport, INCREASE, Y_AXIS, UNIT); KeyStroke downKey = KeyStroke.getKeyStroke("DOWN"); inputMap.put(downKey, "down"); actionMap.put("down", downKeyAction); Action leftKeyAction = new MoveAction(viewport, DECREASE, X_AXIS, UNIT); KeyStroke leftKey = KeyStroke.getKeyStroke("LEFT"); inputMap.put(leftKey, "left"); actionMap.put("left", leftKeyAction); Action rightKeyAction = new MoveAction(viewport, INCREASE, X_AXIS, UNIT); KeyStroke rightKey = KeyStroke.getKeyStroke("RIGHT"); inputMap.put(rightKey, "right"); actionMap.put("right", rightKeyAction); Action pgUpKeyAction = new MoveAction(viewport, DECREASE, Y_AXIS, BLOCK); KeyStroke pgUpKey = KeyStroke.getKeyStroke("PAGE_UP"); inputMap.put(pgUpKey, "pgUp"); actionMap.put("pgUp", pgUpKeyAction); Action pgDnKeyAction = new MoveAction(viewport, INCREASE, Y_AXIS, BLOCK); KeyStroke pgDnKey = KeyStroke.getKeyStroke("PAGE_DOWN"); inputMap.put(pgDnKey, "pgDn"); actionMap.put("pgDn", pgDnKeyAction); Action shiftPgUpKeyAction = new MoveAction(viewport, DECREASE, X_AXIS, BLOCK); KeyStroke shiftPgUpKey = KeyStroke.getKeyStroke("shift PAGE_UP"); inputMap.put(shiftPgUpKey, "shiftPgUp"); actionMap.put("shiftPgUp", shiftPgUpKeyAction); Action shiftPgDnKeyAction = new MoveAction(viewport, INCREASE, X_AXIS, BLOCK); KeyStroke shiftPgDnKey = KeyStroke.getKeyStroke("shift PAGE_DOWN"); inputMap.put(shiftPgDnKey, "shiftPgDn"); actionMap.put("shiftPgDn", shiftPgDnKeyAction); frame.add(viewport, BorderLayout.CENTER); frame.setSize(300, 200); frame.setVisible(true); } }