View Javadoc

1   /*
2    * Jour - java profiler and monitoring library
3    *
4    * Copyright (C) 2004 Jour team
5    *
6    * This library is free software; you can redistribute it and/or
7    * modify it under the terms of the GNU Library General Public
8    * License as published by the Free Software Foundation; either
9    * version 2 of the License, or (at your option) any later version.
10   *
11   * This library is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   * Library General Public License for more details.
15   *
16   * You should have received a copy of the GNU Library General Public
17   * License along with this library; if not, write to the
18   * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19   * Boston, MA  02111-1307, USA.
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          //Create the scroll pane and add the table to it.
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          //Add the scroll pane to this panel.
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 }