1 21 22 package org.armedbear.j; 23 24 import java.awt.Rectangle ; 25 import javax.swing.JTree ; 26 import javax.swing.tree.DefaultMutableTreeNode ; 27 import javax.swing.tree.TreeModel ; 28 import javax.swing.tree.TreePath ; 29 30 public class SidebarTree extends JTree 31 { 32 public SidebarTree(TreeModel model) 33 { 34 super(model); 35 } 36 37 protected void scrollNodeToCenter(DefaultMutableTreeNode node) 38 { 39 TreePath treePath = new TreePath (node.getPath()); 40 TreePath parentPath = treePath.getParentPath(); 41 if (parentPath != null) 42 expandPath(parentPath); 43 int row = getRowForPath(treePath); 44 scrollRowToCenter(row); 45 setSelectionRow(row); 46 } 47 48 protected void scrollRowToCenter(int row) 49 { 50 Rectangle rect = getVisibleRect(); 51 int top = getClosestRowForLocation(rect.x, rect.y); 52 int bottom = top + getVisibleRowCount() - 1; 53 int margin = getVisibleRowCount() / 4; 54 int first = row - margin; 55 if (first < 0) 56 first = 0; 57 int last = row + margin; 58 if (last > getRowCount() - 1) 59 last = getRowCount() - 1; 60 if (first < top || first > bottom) { 61 scrollRowToVisible(first); 62 rect = getVisibleRect(); 63 top = getClosestRowForLocation(rect.x, rect.y); 64 bottom = top + getVisibleRowCount() - 1; 65 } 66 if (last < top || last > bottom) 67 scrollRowToVisible(last); 68 } 69 } 70 | Popular Tags |