import java.awt.*; import java.util.*; public class ScPanel extends Panel{ public Scrollbar h, v; public ViewPanel view; public ScPanel(Component cmp, boolean cmp_mouseEv){ view = new ViewPanel(this, cmp, cmp_mouseEv); h = new Scrollbar(Scrollbar.HORIZONTAL); v = new Scrollbar(Scrollbar.VERTICAL); setLayout(new BorderLayout()); add("Center", view); add("South", h); add("East", v); } public ScPanel(Component cmp){ this(cmp, true); } public Point p(){ return new Point(h.getValue(), v.getValue()); } public Point view2cmp(Point p){ return Pts.add(p, this.p()); } public Point cmp2view(Point p){ return Pts.sub(p, this.p()); } void setSc(){ Point p = this.p(); h.setValues(p.x, view.size().width, 0, view.cmp_size().width); v.setValues(p.y, view.size().height, 0, view.cmp_size().height); Point hlf = Pts.cen(view.size()); h.setPageIncrement(hlf.x); v.setPageIncrement(hlf.y); } public void reshape(int x, int y, int w, int h){ super.reshape(x,y,w,h); layout(); setSc(); } public boolean handleEvent(Event e){ if(chkScEvt(e) && (e.target == h || e.target == v)){ view.cmp_move(); return true; } return false; } boolean chkScEvt(Event e){ switch(e.id){ case Event.SCROLL_LINE_UP: case Event.SCROLL_LINE_DOWN: case Event.SCROLL_PAGE_UP: case Event.SCROLL_PAGE_DOWN: case Event.SCROLL_ABSOLUTE: return true; } return false; } public Point viewCen2cmp(){ return view2cmp(Pts.cen(view.size())); } public void scrollCenter(Point cmp_pt){ Point dif = Pts.sub(cmp_pt,viewCen2cmp()); h.setValue(h.getValue()+dif.x); v.setValue(v.getValue()+dif.y); view.cmp_move(); } } // EOF