1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package net.sf.jour.rt.swingmonitor;
22
23 import java.awt.BorderLayout;
24 import java.awt.Dimension;
25 import java.awt.event.*;
26
27 import javax.swing.*;
28 import javax.swing.JScrollPane;
29 import javax.swing.JTable;
30 import javax.swing.border.*;
31 import javax.swing.event.*;
32 import javax.swing.table.AbstractTableModel;
33
34
35 /***
36 * @author michaellif TODO To change the template for this generated type
37 * comment go to Window - Preferences - Java - Code Style - Code
38 * Templates
39 */
40 public class InstanceCounterPanel extends JPanel implements ActionListener {
41
42 /*** DOCUMENT ME! */
43 private JButton runGCButton;
44
45 /*** DOCUMENT ME! */
46 private JButton updateButton;
47
48 /*** DOCUMENT ME! */
49 private JButton markerButton;
50
51 /*** DOCUMENT ME! */
52 private InstanceCounterTableModel instanceCounterTM;
53
54 /*** DOCUMENT ME! */
55 private InstanceCounter instanceCounter;
56
57 /***
58 * Creates a new InstanceCounterPanel object.
59 *
60 * @param instanceCounter DOCUMENT ME!
61 */
62 public InstanceCounterPanel(InstanceCounter instanceCounter) {
63 super(new BorderLayout());
64 this.instanceCounter = instanceCounter;
65 instanceCounterTM = new InstanceCounterTableModel();
66
67 TableSorter sorter = new TableSorter(instanceCounterTM);
68 JTable table = new JTable(sorter);
69 sorter.setTableHeader(table.getTableHeader());
70
71 table.setPreferredScrollableViewportSize(new Dimension(500, 70));
72
73
74 JScrollPane scrollPane = new JScrollPane(table);
75
76 updateButton = new JButton("Update");
77 updateButton.addActionListener(this);
78 updateButton.setPreferredSize(new Dimension(100, 25));
79
80 markerButton = new JButton("Marker");
81 markerButton.addActionListener(this);
82 markerButton.setPreferredSize(new Dimension(100, 25));
83
84 runGCButton = new JButton("Run GC");
85 runGCButton.addActionListener(this);
86 runGCButton.setPreferredSize(new Dimension(100, 25));
87
88 JPanel controlPane = new JPanel();
89 controlPane.setBorder(new EmptyBorder(4, 4, 4, 4));
90 controlPane.setLayout(new BoxLayout(controlPane, BoxLayout.X_AXIS));
91 controlPane.add(Box.createGlue());
92 controlPane.add(updateButton);
93 controlPane.add(Box.createRigidArea(new Dimension(5, 1)));
94 controlPane.add(markerButton);
95 controlPane.add(Box.createRigidArea(new Dimension(5, 1)));
96 controlPane.add(runGCButton);
97 controlPane.add(Box.createGlue());
98
99
100 add(scrollPane, BorderLayout.CENTER);
101 add(controlPane, BorderLayout.SOUTH);
102
103 updateTable();
104 }
105
106 /***
107 * DOCUMENT ME!
108 */
109 public void updateTable() {
110 Object[][] data = instanceCounter.getReport();
111 instanceCounterTM.setData(data);
112 }
113
114 /***
115 * DOCUMENT ME!
116 *
117 * @param event DOCUMENT ME!
118 */
119 public void actionPerformed(ActionEvent event) {
120 if (event.getSource() == runGCButton) {
121 System.gc();
122 } else if (event.getSource() == updateButton) {
123 } else if (event.getSource() == markerButton) {
124 instanceCounter.setMarker();
125 }
126 updateTable();
127 }
128
129 /***
130 * DOCUMENT ME!
131 *
132 * @author $author$
133 * @version $Revision: 1.3 $
134 */
135 class InstanceCounterTableModel extends AbstractTableModel {
136 /*** DOCUMENT ME! */
137 private String[] columnNames = { "Class", "# of Instances", "delta" };
138
139 /*** DOCUMENT ME! */
140 private Object[][] data = { };
141
142 /***
143 * DOCUMENT ME!
144 *
145 * @param data DOCUMENT ME!
146 */
147 public void setData(Object[][] data) {
148 this.data = data;
149 fireTableChanged(new TableModelEvent(this));
150 }
151
152 /***
153 * DOCUMENT ME!
154 *
155 * @return DOCUMENT ME!
156 */
157 public int getColumnCount() {
158 return columnNames.length;
159 }
160
161 /***
162 * DOCUMENT ME!
163 *
164 * @return DOCUMENT ME!
165 */
166 public int getRowCount() {
167 return data.length;
168 }
169
170 /***
171 * DOCUMENT ME!
172 *
173 * @param col DOCUMENT ME!
174 *
175 * @return DOCUMENT ME!
176 */
177 public String getColumnName(int col) {
178 return columnNames[col];
179 }
180
181 /***
182 * DOCUMENT ME!
183 *
184 * @param row DOCUMENT ME!
185 * @param col DOCUMENT ME!
186 *
187 * @return DOCUMENT ME!
188 */
189 public Object getValueAt(int row, int col) {
190 return data[row][col];
191 }
192
193 /***
194 * DOCUMENT ME!
195 *
196 * @param c DOCUMENT ME!
197 *
198 * @return DOCUMENT ME!
199 */
200 public Class getColumnClass(int c) {
201 return getValueAt(0, c).getClass();
202 }
203
204 /***
205 * DOCUMENT ME!
206 *
207 * @param row DOCUMENT ME!
208 * @param col DOCUMENT ME!
209 *
210 * @return DOCUMENT ME!
211 */
212 public boolean isCellEditable(int row, int col) {
213 return false;
214 }
215
216 /***
217 * DOCUMENT ME!
218 *
219 * @param value DOCUMENT ME!
220 * @param row DOCUMENT ME!
221 * @param col DOCUMENT ME!
222 */
223 public void setValueAt(Object value, int row, int col) {
224 data[row][col] = value;
225 fireTableCellUpdated(row, col);
226 }
227 }
228 }