File: TrackingSpacer.java

package info (click to toggle)
mac-widgets 0.10.0%2Bsvn416-dfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 1,968 kB
  • ctags: 2,003
  • sloc: java: 9,909; makefile: 13; sh: 12
file content (71 lines) | stat: -rw-r--r-- 2,555 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.explodingpixels.widgets;

import java.awt.Dimension;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

import javax.swing.JComponent;

/**
 * A {@link JComponent} that tracks the width or height of another component.
 */
public class TrackingSpacer extends JComponent {

    private final JComponent fComponent;
    private final TrackingDimension fTrackingDimension;
    private final int fDelta;

    /**
     * Creates a spacer component that adjusts it's width or height to the
     * given component.
     *
     * @param componentToTrack  the component to track the width or height of.
     * @param trackingDimension the dimension of the given compoonent to track.
     * @param delta             the amount to add or subtract from the given components
     *                          size (helps accomodate padding).
     */
    public TrackingSpacer(JComponent componentToTrack,
                          TrackingDimension trackingDimension,
                          int delta) {
        fComponent = componentToTrack;
        fTrackingDimension = trackingDimension;
        fDelta = delta;
        // listen for the given component to be resized.
        fComponent.addComponentListener(createComponentListner());
        // update the initial preferred size of the spacer.
        doTrackedComponentResized();
    }

    private void doTrackedComponentResized() {
        setPreferredSize(fTrackingDimension.createDimension(fComponent, fDelta));
        revalidate();
    }

    private ComponentListener createComponentListner() {
        return new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                doTrackedComponentResized();
            }
        };
    }

    /**
     * An enumeration representing the dimension of a component to track.
     */
    public enum TrackingDimension {
        WIDTH {
            // return a Dimension based on the given components width dimension.
            Dimension createDimension(JComponent component, int delta) {
                return new Dimension(component.getWidth() + delta, 1);
            }},
        HEIGHT {
            // return a Dimension based on the given components height dimension.
            Dimension createDimension(JComponent component, int delta) {
                return new Dimension(1, component.getHeight() + delta);
            }};

        abstract Dimension createDimension(JComponent component, int delta);
    }
}