Java Tutorial/Swing/JViewport
Customizing a JViewport Look and Feel
Property StringObject TypeViewport.backgroundColorViewport.fontFontViewport.foregroundColorViewportUIString
Keyboard Movement Control in a JViewport
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);
}
}