Revision 11117 trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/histogram/ui/HistogramPanel.java

View differences:

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