1 package com.sshtools.ui.swing; 2 3 import java.awt.BorderLayout ; 4 import java.awt.Component ; 5 import java.awt.Dimension ; 6 import java.awt.Point ; 7 import java.awt.event.ActionEvent ; 8 import java.awt.event.ActionListener ; 9 import javax.swing.JButton ; 10 import javax.swing.JPanel ; 11 import javax.swing.JViewport ; 12 import javax.swing.plaf.basic.BasicArrowButton ; 13 14 public class ScrollingPanel extends JPanel implements ActionListener { 15 16 protected JButton north; 17 protected JButton south; 18 protected JViewport viewport; 19 protected int incr = 48; 20 21 public ScrollingPanel(Component component) { 22 setLayout(new BorderLayout ()); 23 north = new BasicArrowButton (BasicArrowButton.NORTH); 24 south = new BasicArrowButton (BasicArrowButton.SOUTH); 25 viewport = new JViewport (); 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 event) { 40 Dimension view = new Dimension (getSize().width, getSize().height - north.getPreferredSize().height - south.getPreferredSize().height); 41 Dimension pane = viewport.getView().getPreferredSize(); 42 Point top = viewport.getViewPosition(); 43 if (event.getSource() == north) { 44 if (top.y < incr) { 45 viewport.setViewPosition(new Point (0, 0)); 46 } else { 47 viewport.setViewPosition(new Point (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 (0, max)); 56 } else { 57 viewport.setViewPosition(new Point (0, top.y + incr)); 58 } 59 } 60 setAvailableActions(); 61 } 62 63 public void setAvailableActions() { 64 Dimension view = getSize(); 65 Dimension pane = viewport.getView().getPreferredSize(); 66 Point top = viewport.getViewPosition(); 67 } 70 } 71 | Popular Tags |