import java.awt.BorderLayout;
import java.awt.Insets;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JViewport;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ButtonScroll extends JFrame {
protected JViewport viewport;
protected JButton upButton;
protected JButton downButton;
protected JButton leftButton;
protected JButton rightButton;
protected int pgVertical;
protected int pgHorzontal;
public ButtonScroll() {
super("Scrolling Programmatically");
setSize(400, 400);
getContentPane().setLayout(new BorderLayout());
ImageIcon shuttle = new ImageIcon("largeJava2sLogo.GIF");
pgVertical = shuttle.getIconHeight() / 5;
pgHorzontal = shuttle.getIconWidth() / 5;
JLabel lbl = new JLabel(shuttle);
viewport = new JViewport();
viewport.setView(lbl);
viewport.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
enableButtons(ButtonScroll.this.viewport.getViewPosition());
}
});
getContentPane().add(viewport, BorderLayout.CENTER);
JPanel pv = new JPanel(new BorderLayout());
upButton = createButton("up", 'u');
ActionListener lst = new ActionListener() {
public void actionPerformed(ActionEvent e) {
movePanel(0, -1);
}
};
upButton.addActionListener(lst);
pv.add(upButton, BorderLayout.NORTH);
downButton = createButton("down", 'd');
lst = new ActionListener() {
public void actionPerformed(ActionEvent e) {
movePanel(0, 1);
}
};
downButton.addActionListener(lst);
pv.add(downButton, BorderLayout.SOUTH);
getContentPane().add(pv, BorderLayout.EAST);
JPanel ph = new JPanel(new BorderLayout());
leftButton = createButton("left", 'l');
lst = new ActionListener() {
public void actionPerformed(ActionEvent e) {
movePanel(-1, 0);
}
};
leftButton.addActionListener(lst);
ph.add(leftButton, BorderLayout.WEST);
rightButton = createButton("right", 'r');
lst = new ActionListener() {
public void actionPerformed(ActionEvent e) {
movePanel(1, 0);
}
};
rightButton.addActionListener(lst);
ph.add(rightButton, BorderLayout.EAST);
getContentPane().add(ph, BorderLayout.SOUTH);
WindowListener wndCloser = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(wndCloser);
setVisible(true);
movePanel(0, 0);
}
protected JButton createButton(String name, char mnemonics) {
JButton btn = new JButton(name );
btn.setToolTipText("Move " + name);
btn.setBorderPainted(false);
btn.setMargin(new Insets(0, 0, 0, 0));
btn.setContentAreaFilled(false);
btn.setMnemonic(mnemonics);
return btn;
}
protected void movePanel(int xmove, int ymove) {
Point pt = viewport.getViewPosition();
pt.x += pgHorzontal * xmove;
pt.y += pgVertical * ymove;
pt.x = Math.max(0, pt.x);
pt.x = Math.min(getMaxXExtent(), pt.x);
pt.y = Math.max(0, pt.y);
pt.y = Math.min(getMaxYExtent(), pt.y);
viewport.setViewPosition(pt);
enableButtons(pt);
}
protected void enableButtons(Point pt) {
if (pt.x == 0)
enableComponent(leftButton, false);
else
enableComponent(leftButton, true);
if (pt.x >= getMaxXExtent())
enableComponent(rightButton, false);
else
enableComponent(rightButton, true);
if (pt.y == 0)
enableComponent(upButton, false);
else
enableComponent(upButton, true);
if (pt.y >= getMaxYExtent())
enableComponent(downButton, false);
else
enableComponent(downButton, true);
}
protected void enableComponent(JComponent c, boolean b) {
if (c.isEnabled() != b)
c.setEnabled(b);
}
protected int getMaxXExtent() {
return viewport.getView().getWidth() - viewport.getWidth();
}
protected int getMaxYExtent() {
return viewport.getView().getHeight() - viewport.getHeight();
}
public static void main(String argv[]) {
new ButtonScroll();
}
}
|