Revision 11117 trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/histogram/ui/HistogramPanel.java
HistogramPanel.java | ||
---|---|---|
19 | 19 |
package org.gvsig.rastertools.histogram.ui; |
20 | 20 |
|
21 | 21 |
import java.awt.BorderLayout; |
22 |
import java.awt.GridBagConstraints; |
|
23 |
import java.awt.GridBagLayout; |
|
22 |
import java.awt.FlowLayout; |
|
24 | 23 |
import java.util.ArrayList; |
25 | 24 |
|
26 | 25 |
import javax.swing.JButton; |
27 | 26 |
import javax.swing.JComboBox; |
28 | 27 |
import javax.swing.JLabel; |
29 | 28 |
import javax.swing.JPanel; |
29 |
import javax.swing.JScrollPane; |
|
30 |
import javax.swing.JTable; |
|
31 |
import javax.swing.table.DefaultTableModel; |
|
30 | 32 |
|
31 | 33 |
import org.cresques.filter.RasterBuf; |
32 | 34 |
import org.cresques.i18n.Messages; |
... | ... | |
70 | 72 |
* Componentes graficos |
71 | 73 |
*/ |
72 | 74 |
private GraphicContainer graphicContainer = null; |
73 |
private JPanel pTable = null; |
|
74 | 75 |
private JComboBox jComboBoxOrigen = null; |
75 | 76 |
private JComboBox jComboBoxTipo = null; |
76 |
private JComboBox jComboBands = null; |
|
77 |
private JButton jButtonClear = null; |
|
78 | 77 |
private JButton bTable = null; |
79 | 78 |
private TableContainer tableContainer = null; |
80 |
private JPanel cbSup = null; |
|
81 |
private JLabel lOrigin = null; |
|
82 |
private JLabel lBands = null; |
|
83 |
private JLabel lType = null; |
|
79 |
private JPanel panelNorth = null; |
|
80 |
private JPanel panelSouth = null; |
|
84 | 81 |
|
82 |
private JTable jTableBands = null; |
|
83 |
|
|
85 | 84 |
/** |
86 | 85 |
* Tipo de dato de la petici?n. Si la petici?n del histograma es de la vista el tipo |
87 | 86 |
* de dato ser? byte aunque la imagen sea de 16 bits. Si la petici?n es de los datos |
88 | 87 |
* reales de la imagen entonces el tipo de dato de la petici?n coincide con el tipo |
89 | 88 |
* de datos de la imagen. |
90 | 89 |
*/ |
91 |
private int requestDataType = RasterBuf.TYPE_BYTE;
|
|
90 |
private int dataType = RasterBuf.TYPE_BYTE;
|
|
92 | 91 |
|
93 | 92 |
/** |
94 | 93 |
* Crea un dialogo para los histogramas. |
... | ... | |
106 | 105 |
*/ |
107 | 106 |
private void initialize() { |
108 | 107 |
this.setLayout(new BorderLayout(5, 5)); |
109 |
this.add(getCbSup(), java.awt.BorderLayout.NORTH);
|
|
108 |
this.add(getPanelNorth(), java.awt.BorderLayout.NORTH);
|
|
110 | 109 |
this.add(getGraphicContainer(), java.awt.BorderLayout.CENTER); |
111 |
this.add(getPTable(), java.awt.BorderLayout.SOUTH);
|
|
110 |
this.add(getPanelSouth(), java.awt.BorderLayout.SOUTH);
|
|
112 | 111 |
this.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5)); |
112 |
|
|
113 | 113 |
getHistogramPanelListener().setControlListeners(); |
114 | 114 |
} |
115 | 115 |
|
... | ... | |
130 | 130 |
* |
131 | 131 |
* @return javax.swing.JPanel |
132 | 132 |
*/ |
133 |
private JPanel getPTable() {
|
|
134 |
if (pTable == null) {
|
|
135 |
pTable = new JPanel();
|
|
136 |
pTable.setLayout(new BorderLayout(5,5));
|
|
137 |
pTable.add(getTableContainer(), BorderLayout.CENTER);
|
|
133 |
private JPanel getPanelSouth() {
|
|
134 |
if (panelSouth == null) {
|
|
135 |
panelSouth = new JPanel();
|
|
136 |
panelSouth.setLayout(new BorderLayout(5,5));
|
|
137 |
panelSouth.add(getTableContainer(), BorderLayout.CENTER);
|
|
138 | 138 |
|
139 | 139 |
JPanel jPanel2 = new JPanel(); |
140 | 140 |
jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.Y_AXIS)); |
141 | 141 |
jPanel2.add(getBCreateTable()); |
142 | 142 |
jPanel2.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5)); |
143 | 143 |
|
144 |
pTable.add(jPanel2, BorderLayout.EAST);
|
|
144 |
panelSouth.add(jPanel2, BorderLayout.EAST);
|
|
145 | 145 |
} |
146 |
return pTable;
|
|
146 |
return panelSouth;
|
|
147 | 147 |
} |
148 | 148 |
|
149 | 149 |
/** |
... | ... | |
175 | 175 |
* |
176 | 176 |
* @return javax.swing.JPanel |
177 | 177 |
*/ |
178 |
private JPanel getCbSup() { |
|
179 |
if (cbSup == null) { |
|
180 |
lOrigin = new JLabel(); |
|
181 |
lOrigin.setText(Messages.getText("origen")+":"); |
|
182 |
lBands = new JLabel(); |
|
183 |
lBands.setText(Messages.getText("bandas")+":"); |
|
184 |
lType = new JLabel(); |
|
185 |
lType.setText(Messages.getText("tipo")+":"); |
|
178 |
private JPanel getPanelNorth() { |
|
179 |
if (panelNorth == null) { |
|
180 |
panelNorth = new JPanel(); |
|
181 |
JPanel jPanel3 = new JPanel(); |
|
182 |
JScrollPane jScrollPane1 = new JScrollPane(); |
|
183 |
JPanel jPanel4 = new JPanel(); |
|
184 |
JPanel jPanel5 = new JPanel(); |
|
185 |
|
|
186 |
jScrollPane1.setPreferredSize(new java.awt.Dimension(120,65)); |
|
187 |
jScrollPane1.setViewportView(getJTableBands()); |
|
188 |
|
|
189 |
panelNorth.setLayout(new BorderLayout()); |
|
190 |
panelNorth.add(jPanel3, BorderLayout.CENTER); |
|
191 |
panelNorth.add(jScrollPane1, BorderLayout.EAST); |
|
186 | 192 |
|
187 |
GridBagConstraints gridBagConstraints = new GridBagConstraints(); |
|
188 |
gridBagConstraints.gridy = 0; |
|
189 |
gridBagConstraints.gridx = 0; |
|
190 |
GridBagConstraints gridBagConstraints1 = new GridBagConstraints(); |
|
191 |
gridBagConstraints1.insets = new java.awt.Insets(0,0,0,80); |
|
192 |
gridBagConstraints1.gridy = 0; |
|
193 |
gridBagConstraints1.gridx = 1; |
|
194 |
GridBagConstraints gridBagConstraints2 = new GridBagConstraints(); |
|
195 |
gridBagConstraints2.gridy = 0; |
|
196 |
gridBagConstraints2.gridx = 3; |
|
197 |
GridBagConstraints gridBagConstraints3 = new GridBagConstraints(); |
|
198 |
gridBagConstraints3.insets = new java.awt.Insets(2,0,0,0); |
|
199 |
gridBagConstraints3.gridy = 1; |
|
200 |
gridBagConstraints3.gridx = 0; |
|
201 |
GridBagConstraints gridBagConstraints4 = new GridBagConstraints(); |
|
202 |
gridBagConstraints4.insets = new java.awt.Insets(2,0,0,80); |
|
203 |
gridBagConstraints4.gridy = 1; |
|
204 |
gridBagConstraints4.gridx = 1; |
|
205 |
GridBagConstraints gridBagConstraints5 = new GridBagConstraints(); |
|
206 |
gridBagConstraints5.insets = new java.awt.Insets(2,0,0,0); |
|
207 |
gridBagConstraints5.gridy = 1; |
|
208 |
gridBagConstraints5.gridx = 3; |
|
209 |
GridBagConstraints gridBagConstraints6 = new GridBagConstraints(); |
|
210 |
gridBagConstraints6.gridy = 0; |
|
211 |
gridBagConstraints6.gridx = 2; |
|
193 |
jPanel3.setLayout(new BorderLayout()); |
|
194 |
jPanel3.add(jPanel4, BorderLayout.NORTH); |
|
195 |
jPanel3.add(jPanel5, BorderLayout.SOUTH); |
|
212 | 196 |
|
213 |
cbSup = new JPanel(); |
|
214 |
|
|
215 |
cbSup.setPreferredSize(new java.awt.Dimension(0, 60)); |
|
216 |
|
|
217 |
cbSup.setLayout(new GridBagLayout()); |
|
218 |
cbSup.add(lOrigin, gridBagConstraints); |
|
219 |
cbSup.add(getJComboBoxOrigen(), gridBagConstraints1); |
|
220 |
|
|
221 |
cbSup.add(lBands, gridBagConstraints6); |
|
222 |
|
|
223 |
cbSup.add(getJComboBands(), gridBagConstraints2); |
|
224 |
cbSup.add(lType, gridBagConstraints3); |
|
225 |
cbSup.add(getJComboBoxTipo(), gridBagConstraints4); |
|
226 |
cbSup.add(getJButtonClear(), gridBagConstraints5); |
|
197 |
jPanel4.setLayout(new FlowLayout()); |
|
198 |
jPanel4.add(new JLabel(Messages.getText("origen")+":")); |
|
199 |
jPanel4.add(getJComboBoxOrigen()); |
|
200 |
|
|
201 |
jPanel5.setLayout(new FlowLayout()); |
|
202 |
jPanel5.add(new JLabel(Messages.getText("tipo")+":")); |
|
203 |
jPanel5.add(getJComboBoxTipo()); |
|
227 | 204 |
} |
228 |
return cbSup;
|
|
205 |
return panelNorth;
|
|
229 | 206 |
} |
230 |
|
|
207 |
|
|
231 | 208 |
/** |
232 | 209 |
* Obtiene el combo con la selecci?n de tipo de histograma, acumulado/no acumulado |
233 | 210 |
* @return javax.swing.JComboBox |
... | ... | |
244 | 221 |
} |
245 | 222 |
return jComboBoxTipo; |
246 | 223 |
} |
247 |
|
|
224 |
|
|
248 | 225 |
/** |
249 | 226 |
* Obtiene el combo con la selecci?n de la fuente de datos en el calculo del histograma, |
250 | 227 |
* datos de la vista, datos reales con el extent de la vista e imagen completa. |
... | ... | |
258 | 235 |
} |
259 | 236 |
return jComboBoxOrigen; |
260 | 237 |
} |
261 |
|
|
238 |
|
|
262 | 239 |
/** |
263 | 240 |
*Asigna el combo "Origen" el valor de solo vista para el calculo del histograma. Esa opci?n es |
264 | 241 |
*utilizada para extensiones que necesitan histograma pero no pueden acceder a la fuente de datos. |
... | ... | |
269 | 246 |
getJComboBoxOrigen().addItem(Messages.getText("vista")); |
270 | 247 |
getHistogramPanelListener().eventsEnabled = panelInizialited; |
271 | 248 |
} |
272 |
|
|
249 |
|
|
273 | 250 |
/** |
274 | 251 |
* This method initializes jButton |
275 | 252 |
* |
276 | 253 |
* @return javax.swing.JButton |
277 | 254 |
*/ |
278 |
public JButton getJButtonClear() { |
|
279 |
if (jButtonClear == null) { |
|
280 |
jButtonClear = new JButton(); |
|
281 |
jButtonClear.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); |
|
282 |
jButtonClear.setText(Messages.getText("limpiar")); |
|
283 |
jButtonClear.addActionListener(getHistogramPanelListener()); |
|
284 |
jButtonClear.setPreferredSize(new java.awt.Dimension(100,25)); |
|
285 |
} |
|
286 |
return jButtonClear; |
|
287 |
} |
|
288 |
|
|
289 |
/** |
|
290 |
* This method initializes jButton |
|
291 |
* |
|
292 |
* @return javax.swing.JButton |
|
293 |
*/ |
|
294 | 255 |
public JButton getBCreateTable() { |
295 | 256 |
if (bTable == null) { |
296 | 257 |
bTable = new JButton(); |
... | ... | |
302 | 263 |
} |
303 | 264 |
return bTable; |
304 | 265 |
} |
305 |
|
|
266 |
|
|
306 | 267 |
/** |
307 |
* This method initializes jComboBox
|
|
268 |
* This method initializes jComboBox |
|
308 | 269 |
* |
309 | 270 |
* @return javax.swing.JComboBox |
310 | 271 |
*/ |
311 |
public JComboBox getJComboBands() {
|
|
272 |
public JTable getJTableBands() {
|
|
312 | 273 |
getHistogramPanelListener().eventsEnabled = false; |
313 |
if (jComboBands == null) { |
|
314 |
String lista [] = {Messages.getText("todas")}; |
|
315 |
jComboBands = new JComboBox(lista); |
|
316 |
jComboBands.addActionListener(getHistogramPanelListener()); |
|
317 |
jComboBands.setPreferredSize(new java.awt.Dimension(100,25)); |
|
274 |
if (jTableBands == null) { |
|
275 |
jTableBands = new JTable(); |
|
276 |
jTableBands.setModel(new javax.swing.table.DefaultTableModel( |
|
277 |
new Object [][] {}, |
|
278 |
new String [] { |
|
279 |
" ", Messages.getText("bandas") |
|
280 |
} |
|
281 |
) { |
|
282 |
private static final long serialVersionUID = 0L; |
|
283 |
Class[] types = new Class [] { |
|
284 |
java.lang.Boolean.class, java.lang.String.class |
|
285 |
}; |
|
286 |
boolean[] canEdit = new boolean [] { |
|
287 |
true, false |
|
288 |
}; |
|
289 |
|
|
290 |
public Class getColumnClass(int columnIndex) { |
|
291 |
return types [columnIndex]; |
|
292 |
} |
|
293 |
|
|
294 |
public boolean isCellEditable(int rowIndex, int columnIndex) { |
|
295 |
return canEdit [columnIndex]; |
|
296 |
} |
|
297 |
}); |
|
298 |
jTableBands.addPropertyChangeListener(getHistogramPanelListener()); |
|
299 |
jTableBands.getColumnModel().getColumn(0).setPreferredWidth(20); |
|
300 |
jTableBands.getColumnModel().getColumn(0).setResizable(false); |
|
318 | 301 |
} |
319 | 302 |
getHistogramPanelListener().eventsEnabled = panelInizialited; |
320 |
return jComboBands;
|
|
303 |
return jTableBands;
|
|
321 | 304 |
} |
322 |
|
|
305 |
|
|
323 | 306 |
/** |
324 | 307 |
* Asigna el n?mero de bandas al combobox |
325 | 308 |
* @param bands N?mero de bandas de la imagen |
326 | 309 |
*/ |
327 | 310 |
public void setBands(int bands){ |
328 | 311 |
getHistogramPanelListener().eventsEnabled = false; |
329 |
getJComboBands().removeAllItems(); |
|
330 |
getJComboBands().addItem(Messages.getText("todas")); |
|
312 |
((DefaultTableModel) getJTableBands().getModel()).setRowCount(0); |
|
331 | 313 |
for(int i = 0; i < bands; i++){ |
332 |
getJComboBands().addItem("Band "+String.valueOf(i));
|
|
314 |
((DefaultTableModel) getJTableBands().getModel()).addRow(new Object[] { new Boolean(true), "Band "+String.valueOf(i)});
|
|
333 | 315 |
} |
334 | 316 |
getHistogramPanelListener().eventsEnabled = panelInizialited; |
335 | 317 |
} |
336 |
|
|
337 |
|
|
318 |
|
|
338 | 319 |
/** |
339 | 320 |
* Asigna la estadistica a la tabla |
340 | 321 |
* @param stat |
... | ... | |
358 | 339 |
e.printStackTrace(); |
359 | 340 |
} |
360 | 341 |
} |
361 |
|
|
342 |
|
|
362 | 343 |
/** |
363 | 344 |
* Resetea el control de bandas del panel con los valores RGB para |
364 | 345 |
* cuando se est? haciendo el histograma de la visualizaci?n en |
... | ... | |
367 | 348 |
*/ |
368 | 349 |
public void setRGBInBandList(){ |
369 | 350 |
getHistogramPanelListener().eventsEnabled = false; |
370 |
getJComboBands().removeAllItems(); |
|
371 |
getJComboBands().addItem(Messages.getText("todas")); |
|
372 |
getJComboBands().addItem("R"); |
|
373 |
getJComboBands().addItem("G"); |
|
374 |
getJComboBands().addItem("B"); |
|
351 |
|
|
352 |
((DefaultTableModel) getJTableBands().getModel()).setRowCount(0); |
|
353 |
((DefaultTableModel) getJTableBands().getModel()).addRow(new Object[] { new Boolean(true), "R"}); |
|
354 |
((DefaultTableModel) getJTableBands().getModel()).addRow(new Object[] { new Boolean(true), "G"}); |
|
355 |
((DefaultTableModel) getJTableBands().getModel()).addRow(new Object[] { new Boolean(true), "B"}); |
|
356 |
|
|
375 | 357 |
getHistogramPanelListener().eventsEnabled = panelInizialited; |
376 | 358 |
} |
377 | 359 |
|
... | ... | |
386 | 368 |
double[] currentValues = new double[2]; |
387 | 369 |
currentValues[0] = getGraphicContainer().getX2(); |
388 | 370 |
currentValues[1] = getGraphicContainer().getX1(); |
389 |
switch (requestDataType){
|
|
371 |
switch (dataType){
|
|
390 | 372 |
case RasterBuf.TYPE_BYTE: |
391 | 373 |
v[0] = (currentValues[0] * RasterUtilities.MAX_BYTE_BIT_VALUE) / 100; |
392 | 374 |
v[1] = (currentValues[1] * RasterUtilities.MAX_BYTE_BIT_VALUE) / 100; |
... | ... | |
395 | 377 |
v[0] = (currentValues[0] * RasterUtilities.MAX_SHORT_BIT_VALUE) / 100; |
396 | 378 |
v[1] = (currentValues[1] * RasterUtilities.MAX_SHORT_BIT_VALUE) / 100; |
397 | 379 |
break; |
380 |
case RasterBuf.TYPE_FLOAT: |
|
381 |
case RasterBuf.TYPE_DOUBLE: |
|
382 |
v[0] = (currentValues[0] * 63) / 100; |
|
383 |
v[1] = (currentValues[1] * 63) / 100; |
|
384 |
break; |
|
398 | 385 |
} |
399 | 386 |
return v; |
400 | 387 |
} |
401 |
|
|
388 |
|
|
402 | 389 |
public HistogramPanelListener getHistogramPanelListener() { |
403 | 390 |
if (histogramPanelListener == null) { |
404 | 391 |
histogramPanelListener = new HistogramPanelListener(this); |
405 | 392 |
} |
406 | 393 |
return histogramPanelListener; |
407 | 394 |
} |
408 |
|
|
395 |
|
|
409 | 396 |
public void setHistogramableSource(IHistogramable lyr, String name) { |
410 | 397 |
getHistogramPanelListener().eventsEnabled = false; |
411 | 398 |
ArrayList aux = new ArrayList(); |
... | ... | |
433 | 420 |
comboSource = new ArrayList(); |
434 | 421 |
updateComboBoxSource(); |
435 | 422 |
} |
436 |
|
|
423 |
|
|
437 | 424 |
public void refreshBands() { |
438 | 425 |
//En caso de que el histograma se monte a partir de los datos de la vista ponemos RGB en el combo |
439 | 426 |
int bandCount = getHistogramPanelListener().getLastHistogram().getNumBands(); |
... | ... | |
443 | 430 |
setBands(bandCount); |
444 | 431 |
} |
445 | 432 |
} |
446 |
|
|
433 |
|
|
447 | 434 |
public void firstRun() { |
448 | 435 |
getHistogramPanelListener().showHistogram(); |
449 | 436 |
} |
437 |
|
|
438 |
public void setDataType(int dataType) { |
|
439 |
this.dataType = dataType; |
|
440 |
} |
|
441 |
|
|
442 |
public int getDataType() { |
|
443 |
return dataType; |
|
444 |
} |
|
450 | 445 |
} |
Also available in: Unified diff