1 /* Copyright (C) 2005-2011 Fabio Riccardi */ 2 3 package com.lightcrafts.ui.scroll; 4 5 import javax.swing.*; 6 import java.awt.*; 7 import java.beans.PropertyChangeListener; 8 import java.beans.PropertyChangeEvent; 9 10 public class PannerOverlay extends JLayeredPane { 11 12 private JScrollPane scroll; 13 private Panner panner; 14 PannerOverlay(CenteringScrollPane scroll)15 public PannerOverlay(CenteringScrollPane scroll) { 16 this.scroll = scroll; 17 panner = new Panner(scroll); 18 setLayout(null); 19 add(scroll, DEFAULT_LAYER); 20 add(panner, PALETTE_LAYER); 21 22 // Add and remove the panner when its enabled state changes, 23 // so it won't intercept mouse events directed at the viewport 24 // when it is disabled. 25 panner.addPropertyChangeListener( 26 "enabled", 27 new PropertyChangeListener() { 28 public void propertyChange(PropertyChangeEvent evt) { 29 boolean isEnabled = (Boolean) evt.getNewValue(); 30 if (isEnabled) { 31 add(panner, PALETTE_LAYER); 32 } 33 else { 34 remove(panner); 35 } 36 } 37 } 38 ); 39 } 40 getPreferredSize()41 public Dimension getPreferredSize() { 42 Dimension size = scroll.getPreferredSize(); 43 Insets insets = getInsets(); 44 return new Dimension( 45 size.width + insets.left + insets.right, 46 size.height + insets.top + insets.bottom 47 ); 48 } 49 doLayout()50 public void doLayout() { 51 Dimension size = getSize(); 52 Insets insets = getInsets(); 53 scroll.setBounds( 54 insets.left, 55 insets.top, 56 size.width - insets.left - insets.right, 57 size.height - insets.top - insets.bottom 58 ); 59 Dimension pannerSize = panner.getPreferredSize(); 60 panner.setLocation( 61 size.width - pannerSize.width - insets.right - 20, 62 size.height - pannerSize.height - insets.top - 20 63 ); 64 panner.setSize(pannerSize); 65 } 66 main(String[] args)67 public static void main(String[] args) { 68 JComponent comp = new JTree(); 69 comp.setBackground(Color.gray); 70 CenteringScrollPane scroll = new CenteringScrollPane(comp); 71 PannerOverlay panner = new PannerOverlay(scroll); 72 73 JFrame frame = new JFrame("PannerOverlay"); 74 frame.setContentPane(panner); 75 frame.pack(); 76 frame.setLocationRelativeTo(null); 77 frame.setVisible(true); 78 } 79 } 80