KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sshtools > ui > swing > ScrollingPanel


1 package com.sshtools.ui.swing;
2
3 import java.awt.BorderLayout JavaDoc;
4 import java.awt.Component JavaDoc;
5 import java.awt.Dimension JavaDoc;
6 import java.awt.Point JavaDoc;
7 import java.awt.event.ActionEvent JavaDoc;
8 import java.awt.event.ActionListener JavaDoc;
9 import javax.swing.JButton JavaDoc;
10 import javax.swing.JPanel JavaDoc;
11 import javax.swing.JViewport JavaDoc;
12 import javax.swing.plaf.basic.BasicArrowButton JavaDoc;
13
14 public class ScrollingPanel extends JPanel JavaDoc implements ActionListener JavaDoc {
15   
16   protected JButton JavaDoc north;
17   protected JButton JavaDoc south;
18   protected JViewport JavaDoc viewport;
19   protected int incr = 48;
20   
21   public ScrollingPanel(Component JavaDoc component) {
22     setLayout(new BorderLayout JavaDoc());
23     north = new BasicArrowButton JavaDoc(BasicArrowButton.NORTH);
24     south = new BasicArrowButton JavaDoc(BasicArrowButton.SOUTH);
25     viewport = new JViewport JavaDoc();
26     add(north, BorderLayout.NORTH);
27     add(viewport, BorderLayout.CENTER);
28     add(south, BorderLayout.SOUTH);
29     viewport.setView(component);
30     north.addActionListener(this);
31     south.addActionListener(this);
32     setAvailableActions();
33   }
34
35   public void setIncrement(int incr) {
36     this.incr = incr;
37   }
38
39   public void actionPerformed(ActionEvent JavaDoc event) {
40     Dimension JavaDoc view = new Dimension JavaDoc(getSize().width, getSize().height - north.getPreferredSize().height - south.getPreferredSize().height);
41     Dimension JavaDoc pane = viewport.getView().getPreferredSize();
42     Point JavaDoc top = viewport.getViewPosition();
43     if (event.getSource() == north) {
44       if (top.y < incr) {
45         viewport.setViewPosition(new Point JavaDoc(0, 0));
46       } else {
47         viewport.setViewPosition(new Point JavaDoc(0, top.y - incr));
48       }
49     }
50     if (event.getSource() == south) {
51       int max = pane.height - view.height;
52       if (top.y > (max - incr)) {
53         view = viewport.getExtentSize();
54         max = Math.max(pane.height - view.height, 0);
55         viewport.setViewPosition(new Point JavaDoc(0, max));
56       } else {
57         viewport.setViewPosition(new Point JavaDoc(0, top.y + incr));
58       }
59     }
60     setAvailableActions();
61   }
62
63   public void setAvailableActions() {
64     Dimension JavaDoc view = getSize();
65     Dimension JavaDoc pane = viewport.getView().getPreferredSize();
66     Point JavaDoc top = viewport.getViewPosition();
67     //north.setEnabled(top.y > 0);
68
//south.setEnabled((top.y + view.height) < pane.height);
69
}
70 }
71
Popular Tags