KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sshtools > ui > swing > ClosableTabbedPane


1 package com.sshtools.ui.swing;
2
3 import java.awt.Component JavaDoc;
4 import java.awt.Graphics JavaDoc;
5 import java.awt.Rectangle JavaDoc;
6 import java.awt.event.MouseEvent JavaDoc;
7 import java.awt.event.MouseListener JavaDoc;
8 import java.util.Enumeration JavaDoc;
9 import java.util.Vector JavaDoc;
10
11 import javax.swing.Action JavaDoc;
12 import javax.swing.Icon JavaDoc;
13 import javax.swing.JPopupMenu JavaDoc;
14 import javax.swing.JTabbedPane JavaDoc;
15
16 /**
17  * An extension of <em>JTabbedPane</em> that renders a close graphic onto each
18  * tab.
19  *
20  * @author $Author: brett $
21  */

22 public class ClosableTabbedPane extends JTabbedPane JavaDoc implements MouseListener JavaDoc {
23     private Vector JavaDoc actions;
24     private JPopupMenu JavaDoc popup;
25
26     public ClosableTabbedPane() {
27         this(TOP);
28     }
29
30     public ClosableTabbedPane(int tabPlacement) {
31         super(tabPlacement);
32         init();
33     }
34
35     public void setIconAt(int index, Icon JavaDoc icon) {
36         super.setIconAt(index, new CloseTabIcon(icon));
37     }
38
39     private void init() {
40         actions = new Vector JavaDoc();
41         addMouseListener(this);
42     }
43
44     public void removeAllActions() {
45         actions.removeAllElements();
46     }
47
48     public void addAction(Action JavaDoc action) {
49         if (!actions.contains(action)) {
50             actions.add(action);
51         }
52     }
53
54     public void removeAction(Action JavaDoc action) {
55         actions.remove(action);
56     }
57
58     public void addTab(String JavaDoc title, Component JavaDoc component) {
59         this.addTab(title, component, null);
60     }
61
62     public void addTab(String JavaDoc title, Component JavaDoc component, Icon JavaDoc extraIcon) {
63         super.addTab(title, extraIcon == null ? null : new CloseTabIcon(extraIcon), component);
64     }
65
66     public void addTab(String JavaDoc title, Icon JavaDoc extraIcon, Component JavaDoc component, String JavaDoc toolTip) {
67         super.addTab(title, extraIcon == null ? null : new CloseTabIcon(extraIcon), component, toolTip);
68     }
69
70     public void insertTab(String JavaDoc title, Component JavaDoc component, int idx) {
71         this.insertTab(title, component, null, idx);
72     }
73
74     public void insertTab(String JavaDoc title, Component JavaDoc component, Icon JavaDoc extraIcon, int idx) {
75         super.insertTab(title, extraIcon == null ? null : new CloseTabIcon(extraIcon), component, null, idx);
76     }
77
78     public void mouseClicked(MouseEvent JavaDoc e) {
79         int tabNumber = getUI().tabForCoordinate(this, e.getX(), e.getY());
80         if (tabNumber < 0) {
81             return;
82         }
83         CloseTabIcon cti = ((CloseTabIcon) getIconAt(tabNumber));
84         if (cti != null) {
85             Rectangle JavaDoc rect = cti.getBounds();
86             if (rect.contains(e.getPoint())) {
87                 Component JavaDoc c = (Component JavaDoc) getSelectedComponent();
88                 if (c != null) {
89                     if (popup == null) {
90                         popup = new JPopupMenu JavaDoc(""); //$NON-NLS-1$
91
}
92                     popup.setLabel(getTitleAt(getSelectedIndex()));
93                     popup.invalidate();
94                     popup.removeAll();
95                     Action JavaDoc action;
96                     for (Enumeration JavaDoc en = actions.elements(); en.hasMoreElements();) {
97                         action = (Action JavaDoc) en.nextElement();
98                         if (action != null)
99                             popup.add(action);
100                     }
101                     popup.validate();
102                     Rectangle JavaDoc r = getUI().getTabBounds(this, tabNumber);
103                     popup.show(ClosableTabbedPane.this, r.x, r.y + r.height);
104                 }
105             }
106         }
107     }
108
109     public void mouseEntered(MouseEvent JavaDoc e) {
110     }
111
112     public void mouseExited(MouseEvent JavaDoc e) {
113     }
114
115     public void mousePressed(MouseEvent JavaDoc e) {
116     }
117
118     public void mouseReleased(MouseEvent JavaDoc e) {
119     }
120
121     class CloseTabIcon implements Icon JavaDoc {
122         private int x_pos;
123
124         private int y_pos;
125
126         private int width;
127
128         private int height;
129
130         private Icon JavaDoc fileIcon;
131
132         public CloseTabIcon(Icon JavaDoc fileIcon) {
133             this.fileIcon = fileIcon;
134             width = fileIcon == null ? 16 : fileIcon.getIconWidth();
135             height = fileIcon == null ? 16 : fileIcon.getIconHeight();
136         }
137
138         public void paintIcon(Component JavaDoc c, Graphics JavaDoc g, int x, int y) {
139             this.x_pos = x;
140             this.y_pos = y;
141             if (fileIcon != null) {
142                 fileIcon.paintIcon(c, g, x, y);
143             }
144         }
145
146         public int getIconWidth() {
147             return width;
148         }
149
150         public int getIconHeight() {
151             return height;
152         }
153
154         public Rectangle JavaDoc getBounds() {
155             return new Rectangle JavaDoc(x_pos, y_pos, width, height);
156         }
157     }
158 }
Popular Tags