FileDocCategorySizeDatePackage
CompassButtons.javaAPI DocExample4131Tue Apr 08 10:30:06 BST 2003None

CompassButtons

public class CompassButtons extends JFrame

Fields Summary
JButton
nb
JButton
sb
JButton
eb
JButton
wb
JViewport
viewport
Constructors Summary
public CompassButtons(String terrain)


     
    super("SpringLayout Compass Demo");
    setSize(500,300);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    SpringLayout sl = new SpringLayout();
    Container c = getContentPane();
    c.setLayout(sl);

    int offset = 50;  // gap between buttons and outside edge
    int w      = 80;  // width of buttons
    int h      = 26;  // height of buttons
    int border =  3;  // border around viewport

    Spring offsetS     = Spring.constant(offset);
    Spring borderS     = Spring.constant(border);
    Spring widthS      = Spring.constant(w);
    Spring halfWidthS  = FractionSpring.half(widthS);
    Spring heightS     = Spring.constant(h);
    Spring halfHeightS = FractionSpring.half(heightS);
    Spring leftEdgeS   = sl.getConstraint(SpringLayout.WEST, c);
    Spring topEdgeS    = sl.getConstraint(SpringLayout.NORTH, c);
    Spring rightEdgeS  = sl.getConstraint(SpringLayout.EAST, c); 
    Spring bottomEdgeS = sl.getConstraint(SpringLayout.SOUTH, c); 
    Spring xCenterS    = FractionSpring.half(rightEdgeS);
    Spring yCenterS    = FractionSpring.half(bottomEdgeS);
    Spring leftBorder  = Spring.sum(leftEdgeS, borderS);
    Spring topBorder   = Spring.sum(topEdgeS, borderS);
    
    Spring northX = Spring.sum(xCenterS, Spring.minus(halfWidthS));
    Spring southY = Spring.sum(bottomEdgeS, Spring.minus(Spring.sum(heightS,
                                                                    offsetS)));
    Spring eastX = Spring.sum(rightEdgeS, Spring.minus(Spring.sum(widthS,
                                                                  offsetS)));
    Spring eastY = Spring.sum(yCenterS, Spring.minus(halfHeightS));

    c.add(nb, new SpringLayout.Constraints(northX, offsetS, widthS, heightS));
    c.add(sb, new SpringLayout.Constraints(northX, southY, widthS, heightS));

    c.add(wb);
    sl.getConstraints(wb).setX(offsetS);
    sl.getConstraints(wb).setY(eastY);
    sl.getConstraints(wb).setWidth(widthS);
    sl.getConstraints(wb).setHeight(heightS);
    
    c.add(eb);
    sl.getConstraints(eb).setX(eastX);
    sl.getConstraints(eb).setY(eastY);
    sl.getConstraints(eb).setWidth(widthS);
    sl.getConstraints(eb).setHeight(heightS);

    c.add(viewport); // this sets a bounds of (0,0,pref_width,pref_height)
    // The order here is important...need to have a valid width and height
    // in place before binding the (x,y) location
    sl.putConstraint(SpringLayout.SOUTH, viewport, Spring.minus(borderS), 
                     SpringLayout.SOUTH, c);
    sl.putConstraint(SpringLayout.EAST, viewport, Spring.minus(borderS), 
                     SpringLayout.EAST, c);
    sl.putConstraint(SpringLayout.NORTH, viewport, topBorder, 
                     SpringLayout.NORTH, c);
    sl.putConstraint(SpringLayout.WEST, viewport, leftBorder, 
                     SpringLayout.WEST, c);

    ImageIcon icon = new ImageIcon(getClass().getResource(terrain));
    viewport.setView(new JLabel(icon));

    // Hook up the buttons.  See the CompassScroller class (on-line) for details
    // on controlling the viewport.
    nb.setActionCommand(CompassScroller.NORTH);
    sb.setActionCommand(CompassScroller.SOUTH);
    wb.setActionCommand(CompassScroller.WEST);
    eb.setActionCommand(CompassScroller.EAST);
    CompassScroller scroller = new CompassScroller(viewport);
    nb.addActionListener(scroller);
    sb.addActionListener(scroller);
    eb.addActionListener(scroller);
    wb.addActionListener(scroller);

    setVisible(true);
  
Methods Summary
public static voidmain(java.lang.String[] args)

    new CompassButtons(args.length == 1 ? args[0] : "terrain.gif");