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 |
}
|