| 1 23 package info.monitorenter.gui.chart.layout; 24 25 import info.monitorenter.gui.chart.Chart2D; 26 import info.monitorenter.gui.chart.ITrace2D; 27 import info.monitorenter.gui.chart.traces.Trace2DLtd; 28 29 import java.awt.Color ; 30 import java.awt.Component ; 31 import java.awt.Dimension ; 32 import java.awt.FlowLayout ; 33 import java.awt.GridBagConstraints ; 34 import java.awt.GridBagLayout ; 35 import java.awt.event.MouseListener ; 36 import java.awt.event.WindowAdapter ; 37 import java.awt.event.WindowEvent ; 38 import java.beans.PropertyChangeEvent ; 39 import java.beans.PropertyChangeListener ; 40 import java.util.Iterator ; 41 42 import javax.swing.JFrame ; 43 import javax.swing.JLabel ; 44 import javax.swing.JPanel ; 45 46 93 public class ChartPanel extends JPanel implements PropertyChangeListener { 94 95 98 private static final long serialVersionUID = 3905801963714197560L; 99 100 107 public static void main(final String [] args) { 108 double[] data = new double[100]; 110 for (int i = 0; i < 100; i++) { 111 data[i] = Math.random() * i + 1; 112 } 113 JFrame frame = new JFrame ("ChartPanel demo"); 114 Chart2D chart = new Chart2D(); 115 ITrace2D trace1 = new Trace2DLtd(100); 117 trace1.setName("Trace 1"); 118 119 ITrace2D trace2 = new Trace2DLtd(100); 123 trace2.setName("Trace 2"); 124 for (int i = 0; i < 100; i++) { 127 trace1.addPoint(i + 2, data[i]); 128 trace2.addPoint(i + 2, 100 - data[i]); 129 } 130 131 chart.addTrace(trace1); 133 chart.addTrace(trace2); 134 frame.getContentPane().add(new ChartPanel(chart)); 135 frame.setSize(new Dimension (400, 600)); 136 frame.addWindowListener(new WindowAdapter () { 137 public void windowClosing(final WindowEvent w) { 138 System.exit(0); 139 } 140 141 }); 142 frame.setJMenuBar(LayoutFactory.getInstance().createMenuBar(chart, false)); 143 frame.setVisible(true); 144 } 145 146 147 private Chart2D m_chart; 148 149 156 protected JPanel m_labelPanel; 157 158 167 public ChartPanel(final Chart2D chart) { 168 super(); 169 this.m_chart = chart; 170 this.setBackground(chart.getBackground()); 171 chart.setPaintLabels(false); 173 LayoutFactory.getInstance().createPopupMenu(chart, true); 174 175 GridBagLayout gridbag = new GridBagLayout (); 177 GridBagConstraints c = new GridBagConstraints (); 178 this.setLayout(gridbag); 179 c.fill = GridBagConstraints.BOTH; 180 c.gridwidth = GridBagConstraints.REMAINDER; 181 c.weightx = 1.0; 182 c.weighty = 0.99; 183 184 gridbag.setConstraints(chart, c); 185 this.add(chart); 186 Iterator itTraces = chart.iterator(); 187 ITrace2D trace; 188 this.m_labelPanel = new JPanel (); 191 this.m_labelPanel.setFont(chart.getFont()); 192 this.m_labelPanel.setLayout(new FlowLayout (FlowLayout.LEFT)); 193 this.m_labelPanel.setBackground(chart.getBackground()); 194 JLabel label; 195 while (itTraces.hasNext()) { 196 trace = (ITrace2D) itTraces.next(); 197 label = LayoutFactory.getInstance().createContextMenuLable(chart, trace); 198 this.m_labelPanel.add(label); 199 } 200 c.weighty = 0.01; 201 gridbag.setConstraints(this.m_labelPanel, c); 202 this.add(this.m_labelPanel); 203 chart.addPropertyChangeListener(Chart2D.PROPERTY_BACKGROUND_COLOR, this); 204 chart.addPropertyChangeListener(Chart2D.PROPERTY_ADD_REMOVE_TRACE, this); 206 207 } 208 209 216 public void propertyChange(final PropertyChangeEvent evt) { 217 String prop = evt.getPropertyName(); 218 if (prop.equals(Chart2D.PROPERTY_BACKGROUND_COLOR)) { 219 Color color = (Color ) evt.getNewValue(); 220 this.setBackground(color); 221 this.m_labelPanel.setBackground(color); 222 } else if (prop.equals(Chart2D.PROPERTY_ADD_REMOVE_TRACE)) { 223 ITrace2D oldTrace = (ITrace2D) evt.getOldValue(); 224 ITrace2D newTrace = (ITrace2D) evt.getNewValue(); 225 JLabel label; 226 if (oldTrace == null && newTrace != null) { 227 label = LayoutFactory.getInstance().createContextMenuLable(this.m_chart, newTrace); 228 this.m_labelPanel.add(label); 229 synchronized (this.m_chart) { 230 this.invalidate(); 233 this.m_labelPanel.invalidate(); 234 this.validateTree(); 235 } 236 this.m_labelPanel.doLayout(); 237 } else if (oldTrace != null && newTrace == null) { 238 String labelName = oldTrace.getName(); 240 Component [] labels = (this.m_labelPanel.getComponents()); 241 for (int i = 0; i < labels.length; i++) { 242 if (((JLabel ) labels[i]).getText().equals(labelName)) { 243 this.m_labelPanel.remove(labels[i]); 244 this.m_chart.removePropertyChangeListener((PropertyChangeListener ) labels[i]); 245 oldTrace.removePropertyChangeListener((PropertyChangeListener ) labels[i]); 246 MouseListener [] mouseListeners = labels[i].getMouseListeners(); 248 for (int j = 0; j < mouseListeners.length; j++) { 249 labels[i].removeMouseListener(mouseListeners[j]); 250 } 251 this.m_labelPanel.doLayout(); 252 this.doLayout(); 253 break; 254 } 255 } 256 } else { 257 throw new IllegalArgumentException ("Bad property change event for add / remove trace."); 258 } 259 } 260 } 261 262 } 263 | Popular Tags |