2 |
26 Feb 07 |
jari |
1 |
/* |
2 |
26 Feb 07 |
jari |
Copyright @ 1999-2004, The Institute for Genomic Research (TIGR). |
2 |
26 Feb 07 |
jari |
All rights reserved. |
2 |
26 Feb 07 |
jari |
4 |
*/ |
2 |
26 Feb 07 |
jari |
5 |
/* |
2 |
26 Feb 07 |
jari |
* $RCSfile: FOMGraph.java,v $ |
2 |
26 Feb 07 |
jari |
* $Revision: 1.9 $ |
2 |
26 Feb 07 |
jari |
* $Date: 2006/03/24 15:50:09 $ |
2 |
26 Feb 07 |
jari |
* $Author: eleanorahowe $ |
2 |
26 Feb 07 |
jari |
* $State: Exp $ |
2 |
26 Feb 07 |
jari |
11 |
*/ |
2 |
26 Feb 07 |
jari |
12 |
package org.tigr.microarray.mev.cluster.gui.impl.fom; |
2 |
26 Feb 07 |
jari |
13 |
|
2 |
26 Feb 07 |
jari |
14 |
import java.awt.Color; |
2 |
26 Feb 07 |
jari |
15 |
import java.awt.Dimension; |
2 |
26 Feb 07 |
jari |
16 |
import java.awt.FontMetrics; |
2 |
26 Feb 07 |
jari |
17 |
import java.awt.Graphics; |
2 |
26 Feb 07 |
jari |
18 |
import java.awt.Graphics2D; |
2 |
26 Feb 07 |
jari |
19 |
import java.awt.Insets; |
2 |
26 Feb 07 |
jari |
20 |
import java.awt.Point; |
2 |
26 Feb 07 |
jari |
21 |
import java.awt.RenderingHints; |
2 |
26 Feb 07 |
jari |
22 |
import java.awt.event.ActionEvent; |
2 |
26 Feb 07 |
jari |
23 |
import java.awt.event.ActionListener; |
2 |
26 Feb 07 |
jari |
24 |
import java.awt.event.MouseEvent; |
2 |
26 Feb 07 |
jari |
25 |
import java.awt.event.MouseListener; |
2 |
26 Feb 07 |
jari |
26 |
import java.awt.event.MouseMotionAdapter; |
2 |
26 Feb 07 |
jari |
27 |
import java.awt.image.BufferedImage; |
2 |
26 Feb 07 |
jari |
28 |
|
2 |
26 Feb 07 |
jari |
29 |
import javax.swing.JCheckBoxMenuItem; |
2 |
26 Feb 07 |
jari |
30 |
import javax.swing.JPanel; |
2 |
26 Feb 07 |
jari |
31 |
import javax.swing.JPopupMenu; |
2 |
26 Feb 07 |
jari |
32 |
|
2 |
26 Feb 07 |
jari |
33 |
public class FOMGraph extends JPanel implements java.io.Serializable { |
2 |
26 Feb 07 |
jari |
34 |
public static final long serialVersionUID = 202003060001L; |
2 |
26 Feb 07 |
jari |
35 |
|
2 |
26 Feb 07 |
jari |
36 |
private float[] values; |
2 |
26 Feb 07 |
jari |
37 |
private float [][] iValues; |
2 |
26 Feb 07 |
jari |
38 |
private float[] variances; |
2 |
26 Feb 07 |
jari |
39 |
private String[] xItems; |
2 |
26 Feb 07 |
jari |
40 |
private String[] yItems; |
2 |
26 Feb 07 |
jari |
41 |
private String title, xLabel, yLabel; |
2 |
26 Feb 07 |
jari |
42 |
private Insets insets; |
2 |
26 Feb 07 |
jari |
43 |
private boolean isAntiAliasing = false; |
2 |
26 Feb 07 |
jari |
44 |
|
2 |
26 Feb 07 |
jari |
45 |
private int maxXItem, maxYItem; |
2 |
26 Feb 07 |
jari |
46 |
private float maxYValue = 1f; |
2 |
26 Feb 07 |
jari |
47 |
private Color pointColor = Color.red; |
2 |
26 Feb 07 |
jari |
48 |
private Color valuesLineColor = Color.blue; |
2 |
26 Feb 07 |
jari |
49 |
private Color iterationLineColor = Color.lightGray; |
2 |
26 Feb 07 |
jari |
50 |
private Color sdLineColor = Color.darkGray; |
2 |
26 Feb 07 |
jari |
51 |
private Color mouseLineColor = Color.magenta; |
2 |
26 Feb 07 |
jari |
52 |
private Color gridLineColor = Color.yellow; |
2 |
26 Feb 07 |
jari |
53 |
private Color axisLineColor = Color.black; |
2 |
26 Feb 07 |
jari |
54 |
private int pointSize = 5; |
2 |
26 Feb 07 |
jari |
55 |
|
2 |
26 Feb 07 |
jari |
56 |
private boolean haveIValues; |
2 |
26 Feb 07 |
jari |
57 |
private boolean showVariance; |
2 |
26 Feb 07 |
jari |
58 |
private boolean showIValues; |
2 |
26 Feb 07 |
jari |
59 |
|
2 |
26 Feb 07 |
jari |
60 |
private JPopupMenu menu; |
2 |
26 Feb 07 |
jari |
61 |
private JCheckBoxMenuItem menuItem; |
2 |
26 Feb 07 |
jari |
62 |
|
2 |
26 Feb 07 |
jari |
63 |
private MouseHandler mouseHandler; |
2 |
26 Feb 07 |
jari |
64 |
|
2 |
26 Feb 07 |
jari |
65 |
public FOMGraph(float[] values, float [] variances, String title, String xLabel, String yLabel, boolean showVariance) { |
2 |
26 Feb 07 |
jari |
66 |
if (values == null) { |
2 |
26 Feb 07 |
jari |
67 |
throw new IllegalArgumentException("values == null"); |
2 |
26 Feb 07 |
jari |
68 |
} |
2 |
26 Feb 07 |
jari |
69 |
setBackground(Color.white); |
2 |
26 Feb 07 |
jari |
70 |
this.insets = new Insets(60, 60, 60, 60); |
2 |
26 Feb 07 |
jari |
71 |
this.showVariance = showVariance; |
2 |
26 Feb 07 |
jari |
72 |
this.values = values; |
2 |
26 Feb 07 |
jari |
73 |
this.variances = variances; |
2 |
26 Feb 07 |
jari |
74 |
this.title = title; |
2 |
26 Feb 07 |
jari |
75 |
this.xLabel = xLabel; |
2 |
26 Feb 07 |
jari |
76 |
this.yLabel = yLabel; |
2 |
26 Feb 07 |
jari |
77 |
this.mouseHandler = new MouseHandler(); |
2 |
26 Feb 07 |
jari |
78 |
addMouseMotionListener(mouseHandler); |
2 |
26 Feb 07 |
jari |
79 |
addMouseListener(mouseHandler); |
2 |
26 Feb 07 |
jari |
80 |
} |
2 |
26 Feb 07 |
jari |
81 |
public FOMGraph(){ |
2 |
26 Feb 07 |
jari |
82 |
setBackground(Color.white); |
2 |
26 Feb 07 |
jari |
83 |
this.mouseHandler = new MouseHandler(); |
2 |
26 Feb 07 |
jari |
84 |
addMouseMotionListener(mouseHandler); |
2 |
26 Feb 07 |
jari |
85 |
addMouseListener(mouseHandler); |
2 |
26 Feb 07 |
jari |
86 |
} |
2 |
26 Feb 07 |
jari |
87 |
|
2 |
26 Feb 07 |
jari |
88 |
public void setItems(String[] xItems, String[] yItems) { |
2 |
26 Feb 07 |
jari |
89 |
this.xItems = xItems; |
2 |
26 Feb 07 |
jari |
90 |
this.yItems = yItems; |
2 |
26 Feb 07 |
jari |
91 |
this.maxXItem = getMaxWidth(xItems); |
2 |
26 Feb 07 |
jari |
92 |
this.maxYItem = getMaxWidth(yItems); |
2 |
26 Feb 07 |
jari |
93 |
} |
2 |
26 Feb 07 |
jari |
94 |
|
2 |
26 Feb 07 |
jari |
95 |
public void setFOMIterationValues(float [][] values) { |
2 |
26 Feb 07 |
jari |
96 |
iValues = values; |
2 |
26 Feb 07 |
jari |
97 |
if(iValues != null) { |
2 |
26 Feb 07 |
jari |
98 |
haveIValues = true; |
2 |
26 Feb 07 |
jari |
99 |
showIValues = false; |
2 |
26 Feb 07 |
jari |
100 |
createJPopupMenu(); |
2 |
26 Feb 07 |
jari |
101 |
} |
2 |
26 Feb 07 |
jari |
102 |
} |
2 |
26 Feb 07 |
jari |
103 |
|
2 |
26 Feb 07 |
jari |
104 |
public void createJPopupMenu() { |
2 |
26 Feb 07 |
jari |
105 |
MouseHandler mh = new MouseHandler(); |
2 |
26 Feb 07 |
jari |
106 |
menuItem = new JCheckBoxMenuItem("Show Iteration Values", false); |
2 |
26 Feb 07 |
jari |
107 |
menuItem.addActionListener(mh); |
2 |
26 Feb 07 |
jari |
108 |
menuItem.setFocusPainted(false); |
2 |
26 Feb 07 |
jari |
109 |
menu = new JPopupMenu(); |
2 |
26 Feb 07 |
jari |
110 |
menu.add(menuItem); |
2 |
26 Feb 07 |
jari |
111 |
} |
2 |
26 Feb 07 |
jari |
112 |
|
2 |
26 Feb 07 |
jari |
113 |
public void setMaxYValue(float value) { |
2 |
26 Feb 07 |
jari |
114 |
this.maxYValue = value; |
2 |
26 Feb 07 |
jari |
115 |
} |
2 |
26 Feb 07 |
jari |
116 |
|
2 |
26 Feb 07 |
jari |
117 |
public BufferedImage getImage() { |
2 |
26 Feb 07 |
jari |
118 |
BufferedImage image = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_3BYTE_BGR); //need to use this type for image creation |
2 |
26 Feb 07 |
jari |
119 |
Graphics2D g = image.createGraphics(); |
2 |
26 Feb 07 |
jari |
120 |
g.setColor(Color.white); |
2 |
26 Feb 07 |
jari |
121 |
g.fillRect(0, 0, image.getWidth(), image.getHeight()); |
2 |
26 Feb 07 |
jari |
122 |
paint(g); |
2 |
26 Feb 07 |
jari |
123 |
return image; |
2 |
26 Feb 07 |
jari |
124 |
} |
2 |
26 Feb 07 |
jari |
125 |
|
2 |
26 Feb 07 |
jari |
126 |
/** |
2 |
26 Feb 07 |
jari |
* Sets the anti-aliasing attribute. |
2 |
26 Feb 07 |
jari |
128 |
*/ |
2 |
26 Feb 07 |
jari |
129 |
public void setAntiAliasing(boolean value) { |
2 |
26 Feb 07 |
jari |
130 |
this.isAntiAliasing = value; |
2 |
26 Feb 07 |
jari |
131 |
} |
2 |
26 Feb 07 |
jari |
132 |
|
2 |
26 Feb 07 |
jari |
133 |
public void paint(Graphics g1D) { |
2 |
26 Feb 07 |
jari |
134 |
super.paint(g1D); |
2 |
26 Feb 07 |
jari |
135 |
Graphics2D g = (Graphics2D)g1D; |
2 |
26 Feb 07 |
jari |
136 |
FontMetrics metrics = g.getFontMetrics(); |
2 |
26 Feb 07 |
jari |
137 |
int descent = metrics.getDescent(); |
2 |
26 Feb 07 |
jari |
138 |
if (this.isAntiAliasing) { |
2 |
26 Feb 07 |
jari |
139 |
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); |
2 |
26 Feb 07 |
jari |
140 |
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); |
2 |
26 Feb 07 |
jari |
141 |
} |
2 |
26 Feb 07 |
jari |
142 |
|
2 |
26 Feb 07 |
jari |
143 |
Dimension size = getSize(); |
2 |
26 Feb 07 |
jari |
144 |
final int left = this.insets.left+this.maxYItem; |
2 |
26 Feb 07 |
jari |
145 |
final int top = this.insets.top; |
2 |
26 Feb 07 |
jari |
146 |
final int width = size.width - left - this.insets.right; |
2 |
26 Feb 07 |
jari |
147 |
final int height = size.height - this.insets.bottom - top - this.maxXItem; |
2 |
26 Feb 07 |
jari |
148 |
final float xScale = (float)width/(float)(this.values.length-1); |
2 |
26 Feb 07 |
jari |
149 |
final float yScale = (float)height/this.maxYValue; |
2 |
26 Feb 07 |
jari |
150 |
|
2 |
26 Feb 07 |
jari |
151 |
int strWidth; |
2 |
26 Feb 07 |
jari |
// draw title |
2 |
26 Feb 07 |
jari |
153 |
strWidth = metrics.stringWidth(this.title); |
2 |
26 Feb 07 |
jari |
154 |
g.drawString(this.title, left+(width-strWidth)/2, (this.insets.top+descent)/2); |
2 |
26 Feb 07 |
jari |
// draw xLabel |
2 |
26 Feb 07 |
jari |
156 |
strWidth = metrics.stringWidth(this.xLabel); |
2 |
26 Feb 07 |
jari |
157 |
g.drawString(this.xLabel, left+(width-strWidth)/2, this.insets.top+height+this.maxXItem+(this.insets.top+descent)/2); |
2 |
26 Feb 07 |
jari |
// draw yLabel |
2 |
26 Feb 07 |
jari |
159 |
strWidth = metrics.stringWidth(this.yLabel); |
2 |
26 Feb 07 |
jari |
160 |
g.rotate(-Math.PI/2.0); |
2 |
26 Feb 07 |
jari |
161 |
g.drawString(this.yLabel, -(this.insets.top+(height+strWidth)/2), (this.insets.left+descent)/2); |
2 |
26 Feb 07 |
jari |
162 |
g.rotate(Math.PI/2.0); |
2 |
26 Feb 07 |
jari |
// draw grid |
2 |
26 Feb 07 |
jari |
164 |
g.setColor(this.gridLineColor); |
2 |
26 Feb 07 |
jari |
165 |
if (this.yItems != null) { |
2 |
26 Feb 07 |
jari |
166 |
final float yItemsStep = height/(float)(this.yItems.length-1); |
2 |
26 Feb 07 |
jari |
167 |
for (int i=0; i<this.yItems.length; i++) { |
2 |
26 Feb 07 |
jari |
168 |
if (this.yItems[this.yItems.length-i-1] != null) { |
2 |
26 Feb 07 |
jari |
169 |
g.drawLine(left, top+(int)Math.round(i*yItemsStep), left+width, top+(int)Math.round(i*yItemsStep)); |
2 |
26 Feb 07 |
jari |
170 |
} |
2 |
26 Feb 07 |
jari |
171 |
} |
2 |
26 Feb 07 |
jari |
172 |
} |
2 |
26 Feb 07 |
jari |
173 |
if (this.xItems != null) { |
2 |
26 Feb 07 |
jari |
174 |
final float xItemsStep = width/(float)(this.xItems.length-1); |
2 |
26 Feb 07 |
jari |
175 |
for (int i=0; i<this.xItems.length; i++) { |
2 |
26 Feb 07 |
jari |
176 |
if (this.xItems[i] != null) { |
2 |
26 Feb 07 |
jari |
177 |
g.drawLine(left+(int)Math.round(i*xItemsStep), top, left+(int)Math.round(i*xItemsStep), top+height); |
2 |
26 Feb 07 |
jari |
178 |
} |
2 |
26 Feb 07 |
jari |
179 |
} |
2 |
26 Feb 07 |
jari |
180 |
} |
2 |
26 Feb 07 |
jari |
// draw vertical line |
2 |
26 Feb 07 |
jari |
182 |
g.setColor(this.axisLineColor); |
2 |
26 Feb 07 |
jari |
183 |
g.drawLine(left, top, left, top+height); |
2 |
26 Feb 07 |
jari |
// draw y items |
2 |
26 Feb 07 |
jari |
185 |
if (this.yItems != null) { |
2 |
26 Feb 07 |
jari |
186 |
final float yItemsStep = height/(float)(this.yItems.length-1); |
2 |
26 Feb 07 |
jari |
187 |
for (int i=0; i<this.yItems.length; i++) { |
2 |
26 Feb 07 |
jari |
188 |
g.drawLine(left-5, top+(int)Math.round(i*yItemsStep), left+5, top+(int)Math.round(i*yItemsStep)); |
2 |
26 Feb 07 |
jari |
189 |
if (this.yItems[this.yItems.length-i-1] != null) { |
2 |
26 Feb 07 |
jari |
190 |
g.drawString(this.yItems[this.yItems.length-i-1], left-7-metrics.stringWidth(this.yItems[this.yItems.length-i-1]), top+(int)Math.round(i*yItemsStep)+descent); |
2 |
26 Feb 07 |
jari |
191 |
} |
2 |
26 Feb 07 |
jari |
192 |
} |
2 |
26 Feb 07 |
jari |
193 |
} |
2 |
26 Feb 07 |
jari |
// draw x items |
2 |
26 Feb 07 |
jari |
195 |
if (this.xItems != null) { |
2 |
26 Feb 07 |
jari |
196 |
final float xItemsStep = width/(float)(this.xItems.length-1); |
2 |
26 Feb 07 |
jari |
197 |
for (int i=0; i<this.xItems.length; i++) { |
2 |
26 Feb 07 |
jari |
198 |
g.drawLine(left+(int)Math.round(i*xItemsStep), top+height-5, left+(int)Math.round(i*xItemsStep), top+height+5); |
2 |
26 Feb 07 |
jari |
199 |
} |
2 |
26 Feb 07 |
jari |
200 |
g.rotate(-Math.PI/2.0); |
2 |
26 Feb 07 |
jari |
201 |
final int bottom = top+height+7; |
2 |
26 Feb 07 |
jari |
202 |
for (int i=0; i<this.xItems.length; i++) { |
2 |
26 Feb 07 |
jari |
203 |
if (this.xItems[i] != null) { |
2 |
26 Feb 07 |
jari |
204 |
g.drawString(this.xItems[i], -(bottom+metrics.stringWidth(this.xItems[i])), left+(int)Math.round(i*xItemsStep)+descent); |
2 |
26 Feb 07 |
jari |
205 |
} |
2 |
26 Feb 07 |
jari |
206 |
} |
2 |
26 Feb 07 |
jari |
207 |
g.rotate(Math.PI/2.0); |
2 |
26 Feb 07 |
jari |
208 |
} |
2 |
26 Feb 07 |
jari |
// draw horizontal line |
2 |
26 Feb 07 |
jari |
210 |
g.drawLine(left, top+height, left+width, top+height); |
2 |
26 Feb 07 |
jari |
211 |
|
2 |
26 Feb 07 |
jari |
// draw value lines |
2 |
26 Feb 07 |
jari |
213 |
g.setColor(this.valuesLineColor); |
2 |
26 Feb 07 |
jari |
214 |
int x1, y1, x2, y2, sdY, sdX; |
2 |
26 Feb 07 |
jari |
215 |
|
2 |
26 Feb 07 |
jari |
//show the iteration fom values |
2 |
26 Feb 07 |
jari |
217 |
if(showIValues) { |
2 |
26 Feb 07 |
jari |
218 |
g.setColor(this.iterationLineColor); |
2 |
26 Feb 07 |
jari |
219 |
for (int i=0; i<this.iValues.length; i++) { |
2 |
26 Feb 07 |
jari |
220 |
for(int j = 0; j < iValues[i].length-1; j++) { |
2 |
26 Feb 07 |
jari |
221 |
x1 = left+Math.round(j*xScale); |
2 |
26 Feb 07 |
jari |
222 |
y1 = top+height-Math.round(this.iValues[i][j]*yScale); |
2 |
26 Feb 07 |
jari |
223 |
x2 = left+Math.round((j+1)*xScale); |
2 |
26 Feb 07 |
jari |
224 |
y2 = top+height-Math.round(this.iValues[i][j+1]*yScale); |
2 |
26 Feb 07 |
jari |
225 |
g.drawLine(x1, y1, x2, y2); |
2 |
26 Feb 07 |
jari |
226 |
} |
2 |
26 Feb 07 |
jari |
227 |
} |
2 |
26 Feb 07 |
jari |
228 |
} |
2 |
26 Feb 07 |
jari |
229 |
|
2 |
26 Feb 07 |
jari |
230 |
for (int i=0; i<this.values.length-1; i++) { |
2 |
26 Feb 07 |
jari |
231 |
g.setColor(this.valuesLineColor); |
2 |
26 Feb 07 |
jari |
232 |
x1 = left+Math.round(i*xScale); |
2 |
26 Feb 07 |
jari |
233 |
y1 = top+height-Math.round(this.values[i]*yScale); |
2 |
26 Feb 07 |
jari |
234 |
x2 = left+Math.round((i+1)*xScale); |
2 |
26 Feb 07 |
jari |
235 |
y2 = top+height-Math.round(this.values[i+1]*yScale); |
2 |
26 Feb 07 |
jari |
236 |
g.drawLine(x1, y1, x2, y2); |
2 |
26 Feb 07 |
jari |
237 |
g.drawLine(x1, y1-1, x2, y2-1); |
2 |
26 Feb 07 |
jari |
238 |
|
2 |
26 Feb 07 |
jari |
239 |
if(showVariance) { |
2 |
26 Feb 07 |
jari |
240 |
g.setColor(this.sdLineColor); |
2 |
26 Feb 07 |
jari |
241 |
sdX = x2; |
2 |
26 Feb 07 |
jari |
242 |
sdY = y2; |
2 |
26 Feb 07 |
jari |
243 |
|
2 |
26 Feb 07 |
jari |
//get coordinates |
2 |
26 Feb 07 |
jari |
245 |
x1 = left+Math.round((i+1)*xScale) - 3; |
2 |
26 Feb 07 |
jari |
246 |
x2 = x2 + 3; |
2 |
26 Feb 07 |
jari |
247 |
y1 = top+height-Math.round((this.values[i+1]+this.variances[i+1])*yScale); |
2 |
26 Feb 07 |
jari |
248 |
y2 = top+height-Math.round((this.values[i+1]-this.variances[i+1])*yScale); |
2 |
26 Feb 07 |
jari |
//draw caps |
2 |
26 Feb 07 |
jari |
250 |
g.drawLine(x1, y1, x2, y1); |
2 |
26 Feb 07 |
jari |
251 |
g.drawLine(x1, y2, x2, y2); |
2 |
26 Feb 07 |
jari |
//draw sd lines |
2 |
26 Feb 07 |
jari |
253 |
g.drawLine(sdX, sdY, sdX, y1); |
2 |
26 Feb 07 |
jari |
254 |
g.drawLine(sdX, sdY, sdX, y2); |
2 |
26 Feb 07 |
jari |
255 |
} |
2 |
26 Feb 07 |
jari |
256 |
|
2 |
26 Feb 07 |
jari |
257 |
} |
2 |
26 Feb 07 |
jari |
// draw value points |
2 |
26 Feb 07 |
jari |
259 |
g.setColor(this.pointColor); |
2 |
26 Feb 07 |
jari |
260 |
for (int i=0; i<this.values.length; i++) { |
2 |
26 Feb 07 |
jari |
261 |
g.fillOval(left+Math.round(i*xScale)-this.pointSize/2, top+height-Math.round(this.values[i]*yScale)-this.pointSize/2, this.pointSize, this.pointSize); |
2 |
26 Feb 07 |
jari |
262 |
} |
2 |
26 Feb 07 |
jari |
263 |
this.mouseHandler.validate(); |
2 |
26 Feb 07 |
jari |
264 |
} |
2 |
26 Feb 07 |
jari |
265 |
|
2 |
26 Feb 07 |
jari |
266 |
private int getMaxWidth(String[] items) { |
2 |
26 Feb 07 |
jari |
267 |
if (items == null) { |
2 |
26 Feb 07 |
jari |
268 |
return 0; |
2 |
26 Feb 07 |
jari |
269 |
} |
2 |
26 Feb 07 |
jari |
270 |
FontMetrics metrics = getFontMetrics(getFont()); |
2 |
26 Feb 07 |
jari |
271 |
int width = 0; |
2 |
26 Feb 07 |
jari |
272 |
for (int i=0; i<items.length; i++) { |
2 |
26 Feb 07 |
jari |
273 |
if (items[i] != null) { |
2 |
26 Feb 07 |
jari |
274 |
width = Math.max(width, metrics.stringWidth(items[i])); |
2 |
26 Feb 07 |
jari |
275 |
} |
2 |
26 Feb 07 |
jari |
276 |
} |
2 |
26 Feb 07 |
jari |
277 |
return width; |
2 |
26 Feb 07 |
jari |
278 |
} |
2 |
26 Feb 07 |
jari |
279 |
|
2 |
26 Feb 07 |
jari |
280 |
private void drawMouseCross(int x, int y) { |
2 |
26 Feb 07 |
jari |
281 |
Graphics2D g = (Graphics2D)getGraphics(); |
2 |
26 Feb 07 |
jari |
282 |
g.setColor(this.mouseLineColor); |
2 |
26 Feb 07 |
jari |
283 |
g.setXORMode(getBackground()); |
2 |
26 Feb 07 |
jari |
284 |
Dimension size = getSize(); |
2 |
26 Feb 07 |
jari |
285 |
final int left = insets.left + this.maxYItem; |
2 |
26 Feb 07 |
jari |
286 |
final int right = size.width - this.insets.right; |
2 |
26 Feb 07 |
jari |
287 |
final int top = insets.top; |
2 |
26 Feb 07 |
jari |
288 |
final int bottom = size.height - this.insets.bottom - this.maxXItem; |
2 |
26 Feb 07 |
jari |
289 |
g.drawLine(x, top, x, bottom); |
2 |
26 Feb 07 |
jari |
290 |
g.drawLine(left, y, right, y); |
2 |
26 Feb 07 |
jari |
291 |
g.setPaintMode(); |
2 |
26 Feb 07 |
jari |
292 |
g.dispose(); |
2 |
26 Feb 07 |
jari |
293 |
} |
2 |
26 Feb 07 |
jari |
294 |
|
2 |
26 Feb 07 |
jari |
295 |
private class MouseHandler extends MouseMotionAdapter implements ActionListener, MouseListener, java.io.Serializable { |
2 |
26 Feb 07 |
jari |
296 |
|
2 |
26 Feb 07 |
jari |
297 |
private Point prevCoords = new Point(-1, -1); |
2 |
26 Feb 07 |
jari |
298 |
|
2 |
26 Feb 07 |
jari |
299 |
public void validate() { |
2 |
26 Feb 07 |
jari |
300 |
if (isCoordsValid(prevCoords.x, prevCoords.y)) { |
2 |
26 Feb 07 |
jari |
301 |
drawMouseCross(prevCoords.x, prevCoords.y); |
2 |
26 Feb 07 |
jari |
302 |
} |
2 |
26 Feb 07 |
jari |
303 |
prevCoords.setLocation(-1, -1); |
2 |
26 Feb 07 |
jari |
304 |
} |
2 |
26 Feb 07 |
jari |
305 |
|
2 |
26 Feb 07 |
jari |
306 |
public void mouseMoved(MouseEvent e) { |
2 |
26 Feb 07 |
jari |
307 |
int x = e.getX(); |
2 |
26 Feb 07 |
jari |
308 |
int y = e.getY(); |
2 |
26 Feb 07 |
jari |
309 |
if (isCoordsValid(prevCoords.x, prevCoords.y)) { |
2 |
26 Feb 07 |
jari |
310 |
drawMouseCross(prevCoords.x, prevCoords.y); |
2 |
26 Feb 07 |
jari |
311 |
} |
2 |
26 Feb 07 |
jari |
312 |
if (isCoordsValid(x, y)) { |
2 |
26 Feb 07 |
jari |
313 |
drawMouseCross(x, y); |
2 |
26 Feb 07 |
jari |
314 |
} |
2 |
26 Feb 07 |
jari |
315 |
prevCoords.setLocation(x, y); |
2 |
26 Feb 07 |
jari |
316 |
} |
2 |
26 Feb 07 |
jari |
317 |
|
2 |
26 Feb 07 |
jari |
318 |
private boolean isCoordsValid(int x, int y) { |
2 |
26 Feb 07 |
jari |
319 |
Dimension size = getSize(); |
2 |
26 Feb 07 |
jari |
320 |
final int left = insets.left+maxYItem; |
2 |
26 Feb 07 |
jari |
321 |
final int top = insets.top; |
2 |
26 Feb 07 |
jari |
322 |
final int right = size.width - insets.right; |
2 |
26 Feb 07 |
jari |
323 |
final int bottom = size.height - insets.bottom - maxXItem; |
2 |
26 Feb 07 |
jari |
324 |
return(left < x && x < right) && (top < y && y < bottom); |
2 |
26 Feb 07 |
jari |
325 |
} |
2 |
26 Feb 07 |
jari |
326 |
|
2 |
26 Feb 07 |
jari |
327 |
public void mousePressed(MouseEvent e) { |
2 |
26 Feb 07 |
jari |
328 |
if(menu != null && e.isPopupTrigger()) |
2 |
26 Feb 07 |
jari |
329 |
menu.show(FOMGraph.this, e.getX(), e.getY()); |
2 |
26 Feb 07 |
jari |
330 |
} |
2 |
26 Feb 07 |
jari |
331 |
|
2 |
26 Feb 07 |
jari |
332 |
public void mouseReleased(MouseEvent e) { |
2 |
26 Feb 07 |
jari |
333 |
if(menu != null && e.isPopupTrigger()) |
2 |
26 Feb 07 |
jari |
334 |
menu.show(FOMGraph.this, e.getX(), e.getY()); |
2 |
26 Feb 07 |
jari |
335 |
} |
2 |
26 Feb 07 |
jari |
336 |
|
2 |
26 Feb 07 |
jari |
337 |
public void actionPerformed(ActionEvent ae) { |
2 |
26 Feb 07 |
jari |
338 |
if(menuItem.isSelected()) { |
2 |
26 Feb 07 |
jari |
339 |
showIValues = true; |
2 |
26 Feb 07 |
jari |
340 |
repaint(); |
2 |
26 Feb 07 |
jari |
341 |
} else { |
2 |
26 Feb 07 |
jari |
342 |
showIValues = false; |
2 |
26 Feb 07 |
jari |
343 |
repaint(); |
2 |
26 Feb 07 |
jari |
344 |
} |
2 |
26 Feb 07 |
jari |
345 |
} |
2 |
26 Feb 07 |
jari |
346 |
|
2 |
26 Feb 07 |
jari |
347 |
public void mouseClicked(java.awt.event.MouseEvent mouseEvent) { |
2 |
26 Feb 07 |
jari |
348 |
} |
2 |
26 Feb 07 |
jari |
349 |
|
2 |
26 Feb 07 |
jari |
350 |
public void mouseEntered(java.awt.event.MouseEvent mouseEvent) { |
2 |
26 Feb 07 |
jari |
351 |
} |
2 |
26 Feb 07 |
jari |
352 |
|
2 |
26 Feb 07 |
jari |
353 |
public void mouseExited(java.awt.event.MouseEvent mouseEvent) { |
2 |
26 Feb 07 |
jari |
354 |
} |
2 |
26 Feb 07 |
jari |
355 |
|
2 |
26 Feb 07 |
jari |
356 |
} |
2 |
26 Feb 07 |
jari |
357 |
|
2 |
26 Feb 07 |
jari |
358 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the haveIValues. |
2 |
26 Feb 07 |
jari |
360 |
*/ |
2 |
26 Feb 07 |
jari |
361 |
public boolean isHaveIValues() { |
2 |
26 Feb 07 |
jari |
362 |
return haveIValues; |
2 |
26 Feb 07 |
jari |
363 |
} |
2 |
26 Feb 07 |
jari |
364 |
/** |
2 |
26 Feb 07 |
jari |
* @param haveIValues The haveIValues to set. |
2 |
26 Feb 07 |
jari |
366 |
*/ |
2 |
26 Feb 07 |
jari |
367 |
public void setHaveIValues(boolean haveIValues) { |
2 |
26 Feb 07 |
jari |
368 |
this.haveIValues = haveIValues; |
2 |
26 Feb 07 |
jari |
369 |
} |
2 |
26 Feb 07 |
jari |
370 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the insets. |
2 |
26 Feb 07 |
jari |
372 |
*/ |
2 |
26 Feb 07 |
jari |
373 |
public Insets getInsets() { |
2 |
26 Feb 07 |
jari |
374 |
return insets; |
2 |
26 Feb 07 |
jari |
375 |
} |
2 |
26 Feb 07 |
jari |
376 |
/** |
2 |
26 Feb 07 |
jari |
* @param insets The insets to set. |
2 |
26 Feb 07 |
jari |
378 |
*/ |
2 |
26 Feb 07 |
jari |
379 |
public void setInsets(Insets insets) { |
2 |
26 Feb 07 |
jari |
380 |
this.insets = insets; |
2 |
26 Feb 07 |
jari |
381 |
} |
2 |
26 Feb 07 |
jari |
382 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the iValues. |
2 |
26 Feb 07 |
jari |
384 |
*/ |
2 |
26 Feb 07 |
jari |
385 |
public float[][] getIValues() { |
2 |
26 Feb 07 |
jari |
386 |
return iValues; |
2 |
26 Feb 07 |
jari |
387 |
} |
2 |
26 Feb 07 |
jari |
388 |
/** |
2 |
26 Feb 07 |
jari |
* @param values The iValues to set. |
2 |
26 Feb 07 |
jari |
390 |
*/ |
2 |
26 Feb 07 |
jari |
391 |
public void setIValues(float[][] values) { |
2 |
26 Feb 07 |
jari |
392 |
iValues = values; |
2 |
26 Feb 07 |
jari |
393 |
} |
2 |
26 Feb 07 |
jari |
394 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the maxXItem. |
2 |
26 Feb 07 |
jari |
396 |
*/ |
2 |
26 Feb 07 |
jari |
397 |
public int getMaxXItem() { |
2 |
26 Feb 07 |
jari |
398 |
return maxXItem; |
2 |
26 Feb 07 |
jari |
399 |
} |
2 |
26 Feb 07 |
jari |
400 |
/** |
2 |
26 Feb 07 |
jari |
* @param maxXItem The maxXItem to set. |
2 |
26 Feb 07 |
jari |
402 |
*/ |
2 |
26 Feb 07 |
jari |
403 |
public void setMaxXItem(int maxXItem) { |
2 |
26 Feb 07 |
jari |
404 |
this.maxXItem = maxXItem; |
2 |
26 Feb 07 |
jari |
405 |
} |
2 |
26 Feb 07 |
jari |
406 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the maxYItem. |
2 |
26 Feb 07 |
jari |
408 |
*/ |
2 |
26 Feb 07 |
jari |
409 |
public int getMaxYItem() { |
2 |
26 Feb 07 |
jari |
410 |
return maxYItem; |
2 |
26 Feb 07 |
jari |
411 |
} |
2 |
26 Feb 07 |
jari |
412 |
/** |
2 |
26 Feb 07 |
jari |
* @param maxYItem The maxYItem to set. |
2 |
26 Feb 07 |
jari |
414 |
*/ |
2 |
26 Feb 07 |
jari |
415 |
public void setMaxYItem(int maxYItem) { |
2 |
26 Feb 07 |
jari |
416 |
this.maxYItem = maxYItem; |
2 |
26 Feb 07 |
jari |
417 |
} |
2 |
26 Feb 07 |
jari |
418 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the showIValues. |
2 |
26 Feb 07 |
jari |
420 |
*/ |
2 |
26 Feb 07 |
jari |
421 |
public boolean isShowIValues() { |
2 |
26 Feb 07 |
jari |
422 |
return showIValues; |
2 |
26 Feb 07 |
jari |
423 |
} |
2 |
26 Feb 07 |
jari |
424 |
/** |
2 |
26 Feb 07 |
jari |
* @param showIValues The showIValues to set. |
2 |
26 Feb 07 |
jari |
426 |
*/ |
2 |
26 Feb 07 |
jari |
427 |
public void setShowIValues(boolean showIValues) { |
2 |
26 Feb 07 |
jari |
428 |
this.showIValues = showIValues; |
2 |
26 Feb 07 |
jari |
429 |
} |
2 |
26 Feb 07 |
jari |
430 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the showVariance. |
2 |
26 Feb 07 |
jari |
432 |
*/ |
2 |
26 Feb 07 |
jari |
433 |
public boolean isShowVariance() { |
2 |
26 Feb 07 |
jari |
434 |
return showVariance; |
2 |
26 Feb 07 |
jari |
435 |
} |
2 |
26 Feb 07 |
jari |
436 |
/** |
2 |
26 Feb 07 |
jari |
* @param showVariance The showVariance to set. |
2 |
26 Feb 07 |
jari |
438 |
*/ |
2 |
26 Feb 07 |
jari |
439 |
public void setShowVariance(boolean showVariance) { |
2 |
26 Feb 07 |
jari |
440 |
this.showVariance = showVariance; |
2 |
26 Feb 07 |
jari |
441 |
} |
2 |
26 Feb 07 |
jari |
442 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the title. |
2 |
26 Feb 07 |
jari |
444 |
*/ |
2 |
26 Feb 07 |
jari |
445 |
public String getTitle() { |
2 |
26 Feb 07 |
jari |
446 |
return title; |
2 |
26 Feb 07 |
jari |
447 |
} |
2 |
26 Feb 07 |
jari |
448 |
/** |
2 |
26 Feb 07 |
jari |
* @param title The title to set. |
2 |
26 Feb 07 |
jari |
450 |
*/ |
2 |
26 Feb 07 |
jari |
451 |
public void setTitle(String title) { |
2 |
26 Feb 07 |
jari |
452 |
this.title = title; |
2 |
26 Feb 07 |
jari |
453 |
} |
2 |
26 Feb 07 |
jari |
454 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the values. |
2 |
26 Feb 07 |
jari |
456 |
*/ |
2 |
26 Feb 07 |
jari |
457 |
public float[] getValues() { |
2 |
26 Feb 07 |
jari |
458 |
return values; |
2 |
26 Feb 07 |
jari |
459 |
} |
2 |
26 Feb 07 |
jari |
460 |
/** |
2 |
26 Feb 07 |
jari |
* @param values The values to set. |
2 |
26 Feb 07 |
jari |
462 |
*/ |
2 |
26 Feb 07 |
jari |
463 |
public void setValues(float[] values) { |
2 |
26 Feb 07 |
jari |
464 |
this.values = values; |
2 |
26 Feb 07 |
jari |
465 |
} |
2 |
26 Feb 07 |
jari |
466 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the variances. |
2 |
26 Feb 07 |
jari |
468 |
*/ |
2 |
26 Feb 07 |
jari |
469 |
public float[] getVariances() { |
2 |
26 Feb 07 |
jari |
470 |
return variances; |
2 |
26 Feb 07 |
jari |
471 |
} |
2 |
26 Feb 07 |
jari |
472 |
/** |
2 |
26 Feb 07 |
jari |
* @param variances The variances to set. |
2 |
26 Feb 07 |
jari |
474 |
*/ |
2 |
26 Feb 07 |
jari |
475 |
public void setVariances(float[] variances) { |
2 |
26 Feb 07 |
jari |
476 |
this.variances = variances; |
2 |
26 Feb 07 |
jari |
477 |
} |
2 |
26 Feb 07 |
jari |
478 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the xItems. |
2 |
26 Feb 07 |
jari |
480 |
*/ |
2 |
26 Feb 07 |
jari |
481 |
public String[] getXItems() { |
2 |
26 Feb 07 |
jari |
482 |
return xItems; |
2 |
26 Feb 07 |
jari |
483 |
} |
2 |
26 Feb 07 |
jari |
484 |
/** |
2 |
26 Feb 07 |
jari |
* @param items The xItems to set. |
2 |
26 Feb 07 |
jari |
486 |
*/ |
2 |
26 Feb 07 |
jari |
487 |
public void setXItems(String[] items) { |
2 |
26 Feb 07 |
jari |
488 |
xItems = items; |
2 |
26 Feb 07 |
jari |
489 |
} |
2 |
26 Feb 07 |
jari |
490 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the xLabel. |
2 |
26 Feb 07 |
jari |
492 |
*/ |
2 |
26 Feb 07 |
jari |
493 |
public String getXLabel() { |
2 |
26 Feb 07 |
jari |
494 |
return xLabel; |
2 |
26 Feb 07 |
jari |
495 |
} |
2 |
26 Feb 07 |
jari |
496 |
/** |
2 |
26 Feb 07 |
jari |
* @param label The xLabel to set. |
2 |
26 Feb 07 |
jari |
498 |
*/ |
2 |
26 Feb 07 |
jari |
499 |
public void setXLabel(String label) { |
2 |
26 Feb 07 |
jari |
500 |
xLabel = label; |
2 |
26 Feb 07 |
jari |
501 |
} |
2 |
26 Feb 07 |
jari |
502 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the yItems. |
2 |
26 Feb 07 |
jari |
504 |
*/ |
2 |
26 Feb 07 |
jari |
505 |
public String[] getYItems() { |
2 |
26 Feb 07 |
jari |
506 |
return yItems; |
2 |
26 Feb 07 |
jari |
507 |
} |
2 |
26 Feb 07 |
jari |
508 |
/** |
2 |
26 Feb 07 |
jari |
* @param items The yItems to set. |
2 |
26 Feb 07 |
jari |
510 |
*/ |
2 |
26 Feb 07 |
jari |
511 |
public void setYItems(String[] items) { |
2 |
26 Feb 07 |
jari |
512 |
yItems = items; |
2 |
26 Feb 07 |
jari |
513 |
} |
2 |
26 Feb 07 |
jari |
514 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the yLabel. |
2 |
26 Feb 07 |
jari |
516 |
*/ |
2 |
26 Feb 07 |
jari |
517 |
public String getYLabel() { |
2 |
26 Feb 07 |
jari |
518 |
return yLabel; |
2 |
26 Feb 07 |
jari |
519 |
} |
2 |
26 Feb 07 |
jari |
520 |
/** |
2 |
26 Feb 07 |
jari |
* @param label The yLabel to set. |
2 |
26 Feb 07 |
jari |
522 |
*/ |
2 |
26 Feb 07 |
jari |
523 |
public void setYLabel(String label) { |
2 |
26 Feb 07 |
jari |
524 |
yLabel = label; |
2 |
26 Feb 07 |
jari |
525 |
} |
2 |
26 Feb 07 |
jari |
526 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the isAntiAliasing. |
2 |
26 Feb 07 |
jari |
528 |
*/ |
2 |
26 Feb 07 |
jari |
529 |
public boolean isAntiAliasing() { |
2 |
26 Feb 07 |
jari |
530 |
return isAntiAliasing; |
2 |
26 Feb 07 |
jari |
531 |
} |
2 |
26 Feb 07 |
jari |
532 |
/** |
2 |
26 Feb 07 |
jari |
* @return Returns the maxYValue. |
2 |
26 Feb 07 |
jari |
534 |
*/ |
2 |
26 Feb 07 |
jari |
535 |
public float getMaxYValue() { |
2 |
26 Feb 07 |
jari |
536 |
return maxYValue; |
2 |
26 Feb 07 |
jari |
537 |
} |
2 |
26 Feb 07 |
jari |
538 |
} |