Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / properties / panels / PanSharpeningPanel.java @ 12597

History | View | Annotate | Download (20.1 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 */
19
package org.gvsig.rastertools.properties.panels;
20

    
21
import java.awt.Component;
22
import java.awt.Dimension;
23
import java.awt.FlowLayout;
24
import java.awt.GridBagConstraints;
25
import java.awt.GridBagLayout;
26
import java.awt.event.ActionEvent;
27
import java.awt.event.ActionListener;
28
import java.awt.image.DataBuffer;
29
import java.io.File;
30
import java.util.Vector;
31

    
32
import javax.swing.AbstractCellEditor;
33
import javax.swing.ButtonGroup;
34
import javax.swing.JCheckBox;
35
import javax.swing.JPanel;
36
import javax.swing.JRadioButton;
37
import javax.swing.JScrollPane;
38
import javax.swing.JSlider;
39
import javax.swing.JTable;
40
import javax.swing.JTextField;
41
import javax.swing.SwingConstants;
42
import javax.swing.SwingUtilities;
43
import javax.swing.event.TableModelEvent;
44
import javax.swing.event.TableModelListener;
45
import javax.swing.table.DefaultTableModel;
46
import javax.swing.table.TableCellEditor;
47
import javax.swing.table.TableCellRenderer;
48
import javax.swing.table.TableColumn;
49

    
50
import org.gvsig.raster.dataset.MultiRasterDataset;
51
import org.gvsig.raster.grid.filter.RasterFilterList;
52
import org.gvsig.raster.gui.properties.dialog.IRegistrablePanel;
53
import org.gvsig.raster.hierarchy.IRasterDataset;
54
import org.gvsig.raster.hierarchy.IRasterProperties;
55
import org.gvsig.raster.hierarchy.IRasterRendering;
56
import org.gvsig.rastertools.properties.control.PanSharpeningControl;
57

    
58
import com.iver.andami.PluginServices;
59
import com.iver.cit.gvsig.fmap.layers.FLayer;
60

    
61
/**
62
 * Selecciona las bandas visibles en un raster. Contiene una tabla con una fila por cada
63
 * banda de la imagen. Por medio de checkbox se selecciona para cada RGB que banda de la 
64
 * imagen ser? visualizada. 
65
 * @author Luis W. Sevilla (sevilla_lui@gva.es)
66
 * @author Nacho Brodin (brodin_ign@gva.es)
67
 */
68

    
69
public class PanSharpeningPanel extends JPanel implements IRegistrablePanel,TableModelListener {
70

    
71
        final private static long serialVersionUID = 0;
72
        
73
         private String                                                 nom = "Pansharp";
74
         private JTable                                                 rgbTable = null;
75
         private JScrollPane                                         bandPane = null;
76
         private BandTableModel                                 tableModel = null;
77
         private int                                                         sizeX = 445;
78
         private int                                                         sizeY = 174;
79
         private JPanel                                                        activationPanel = null;
80
         private JCheckBox                                                 cbActiveSharpening = null;
81
         private JPanel                                                 pSharpNorth = null;
82
         private JPanel                                                 pSharpSouth = null;
83
         private JRadioButton                                         rbBrovey = null;
84
         private JRadioButton                                         rbHSL = null;
85
         private JPanel                                                 pHSL = null;
86
         private JSlider                                                 jSlider = null;
87
         private JTextField                                         jTextField = null;
88
         private JPanel                                                 pBrovey = null;
89
         private JSlider                                                 slBrovey = null;
90
         private JTextField                                         jTextField1 = null;
91
         private PanSharpeningControl           pansharpControl=null;
92
         private IRasterProperties                             prop              = null;
93
         private IRasterDataset                                dataset           = null;
94
         FLayer fLayer = null;
95
         private final static String[]         columnNames = { " ", "Band" };
96
         
97
        
98
        public String id = "pansharp";
99

    
100
        
101
        public PanSharpeningPanel() 
102
        {
103
                super();
104
                id = PluginServices.getText(this, id);
105
                initialize();
106
        }
107

    
108
 
109
    void initialize() {
110
        this.setPreferredSize(new Dimension(sizeX, sizeY));
111
        this.setLayout(new FlowLayout());
112
        this.setLocation(0, 0);
113
        this.setSize(445, 239);
114
        this.add(getPSharpNorth(), null);
115
        this.setTableEnabled(false);
116
    }
117

    
118
    /**
119
     * Obtiene el nombre del panel
120
     * @return Cadena con el nombre del panel
121
     */
122
    public String getName(){
123
            return this.nom;
124
    }
125
    
126
    /**
127
     * Activa o desactiva la tabla de selecci?n de banda de refinado
128
     * @param enable
129
     */
130
    public void setTableEnabled(boolean enabled){
131
            this.getRBandPane().setEnabled(enabled);
132
        this.getBandTable().setEnabled(enabled);
133
        this.getJSlider().setEnabled(enabled);
134
        this.getJSlider1().setEnabled(enabled);
135
        this.getJTextField().setEnabled(enabled);
136
        this.getJTextField1().setEnabled(enabled);
137
        this.getRbBrovey().setEnabled(enabled);
138
        this.getRbHSL().setEnabled(enabled);
139
    }
140
    
141
    /**
142
     * Determina el bandtype de de cada banda y a?ade la banda a la tabla
143
     * */
144
    public void addFiles(MultiRasterDataset mDataset) {
145
            for (int i = 0; i < mDataset.getDatasetCount(); i++) {
146
                        String fName = mDataset.getDataset(i).getFName();
147

    
148
                        String bandName = new File(fName).getName();
149
                        String bandType = "";
150

    
151

    
152
                        switch (mDataset.getDataset(i).getDataType()) {
153
                        case DataBuffer.TYPE_BYTE:
154
                                bandType = "8U";
155
                                break;
156
                        case DataBuffer.TYPE_INT:
157
                                bandType = "32";
158
                                break;
159
                        case DataBuffer.TYPE_DOUBLE:
160
                                bandType = "64";
161
                                break;
162
                        case DataBuffer.TYPE_FLOAT:
163
                                bandType = "32";
164
                                break;
165
                        case DataBuffer.TYPE_SHORT:
166
                                bandType = "16";
167
                                break;
168
                        case DataBuffer.TYPE_USHORT:
169
                                bandType = "16U";
170
                                break;
171
                        case DataBuffer.TYPE_UNDEFINED:
172
                                bandType = "??";
173
                                break;
174
                }
175
                        
176
                        for (int b = 0; b < mDataset.getDataset(i).getBandCount(); b++)
177
                                addBand((b + 1) + " [" + bandType + "] " + bandName);
178
        
179
        }
180
    }
181
    
182
    // A?ade una fila a la tabla
183
    private void addBand(String bandName) {
184
                Vector v = new Vector();
185
                v.add(new Boolean(false));
186
                v.add(bandName);
187
                ((DefaultTableModel) getBandTable().getModel()).addRow(v);
188
        }
189
    
190
    
191
    public JTable getBandTable() {
192
        if (rgbTable == null) {
193
            tableModel = new BandTableModel();
194
            tableModel.addTableModelListener(this);
195
            rgbTable = new JTable(tableModel);
196
            rgbTable.setPreferredScrollableViewportSize(new Dimension(300, 60));
197
        }
198
        return rgbTable;
199
    }
200
    
201
    /**
202
     * Traducciones del panel
203
     */
204
    public void setTranslation(){
205
            this.getCbActiveSharpening().setText(PluginServices.getText(this,"onSharpening"));
206
                this.getPSharpNorth().setBorder(javax.swing.BorderFactory.createTitledBorder(null, PluginServices.getText(this,"selectBandaRefinado"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
207
    }
208
    
209
    /**
210
     * This method initializes jTable
211
     *
212
     * @return javax.swing.JTable
213
     */
214
    public JScrollPane getRBandPane() {
215
        if (bandPane == null) {
216
            bandPane = new JScrollPane(getBandTable());
217
            bandPane.setPreferredSize(new java.awt.Dimension(400,100));
218
            bandPane.setEnabled(true);
219
            TableColumn column = null;
220

    
221
            for (int i = 0; i < 1; i++) {
222
               column = rgbTable.getColumnModel().getColumn(i);
223
               column.setCellRenderer((TableCellRenderer) new RadioColumnRenderer());
224
               column.setCellEditor((TableCellEditor) new RadioColumnEditor());
225
               column.setMaxWidth(22);
226
               column.setMinWidth(22);
227
          }
228
        }
229
        return bandPane;
230
    }
231
  
232
    /**
233
     * Obtiene el n?mero de bandas de la lista
234
     * @return
235
     */
236
    public int getNBands() {
237
        return ((DefaultTableModel) rgbTable.getModel()).getRowCount();
238
    }
239

    
240
    /**
241
     * Obtiene el nombre de la banda de la posici?n i de la tabla
242
     * @param i
243
     * @return
244
     */
245
    public String getBandName(int i) {
246
        String s = (String) ((DefaultTableModel) rgbTable.getModel()).getValueAt(i, 1);
247
        return s.substring(s.lastIndexOf("[8U]") + 5, s.length());
248
    }
249

    
250
    /**
251
     * Selecciona una banda de la tabla.
252
     * @param i
253
     */
254
    public void selectRow(int i){
255
            ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(true),i,0);
256
    }
257
    
258
    /**
259
     * Elimina todas las filas seleccionadas
260
     */
261
    public void removeSelections(){
262
            for(int i=0;i<((DefaultTableModel) rgbTable.getModel()).getRowCount();i++){
263
                    ((DefaultTableModel) rgbTable.getModel()).setValueAt(new Boolean(false),i,0);
264
            }
265
    }
266
    
267
   
268
        public JPanel getPSharpNorth() {
269
                if (pSharpNorth == null) {
270
                        GridBagConstraints gridBagConstraints10 = new GridBagConstraints();
271
                        gridBagConstraints10.gridx = 0;
272
                        gridBagConstraints10.gridy = 1;
273
                        GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
274
                        GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
275
                        pSharpNorth = new JPanel();
276
                        pSharpNorth.setLayout(new GridBagLayout());
277
                        pSharpNorth.setPreferredSize(new java.awt.Dimension(440,259));
278
                        pSharpNorth.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Selector de banda de refinado", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
279
                        gridBagConstraints2.gridx = 0;
280
                        gridBagConstraints2.gridy = 0;
281
                        gridBagConstraints2.anchor = java.awt.GridBagConstraints.WEST;
282
                        gridBagConstraints2.gridwidth = 0;
283
                        gridBagConstraints2.gridheight = 1;
284
                        gridBagConstraints3.gridx = 0;
285
                        gridBagConstraints3.gridy = 2;
286
                        gridBagConstraints3.weightx = 0.0D;
287
                        gridBagConstraints3.weighty = 0.0D;
288
                        gridBagConstraints3.fill = java.awt.GridBagConstraints.NONE;
289
                        gridBagConstraints3.ipadx = 0;
290
                        gridBagConstraints3.ipady = 0;
291
                        gridBagConstraints3.insets = new java.awt.Insets(0,0,0,0);
292
                        gridBagConstraints3.gridheight = 0;
293
                        gridBagConstraints3.gridwidth = 0;
294
                        pSharpNorth.add(getActivationPanel(), gridBagConstraints2);
295
                        pSharpNorth.add(getRBandPane(), gridBagConstraints3);
296
                        pSharpNorth.add(getPSharpSouth(), gridBagConstraints10);
297
                }
298
                return pSharpNorth;
299
        }
300
   
301
        private JPanel getActivationPanel() {
302
                if (activationPanel == null) {
303
                        FlowLayout flowLayout = new FlowLayout();
304
                        flowLayout.setAlignment(java.awt.FlowLayout.LEFT);
305
                        flowLayout.setVgap(0);
306
                        flowLayout.setHgap(0);
307
                        activationPanel = new JPanel();
308
                        activationPanel.setLayout(flowLayout);
309
                        activationPanel.setPreferredSize(new java.awt.Dimension(340,30));
310
                        activationPanel.add(getCbActiveSharpening(), null);
311
                }
312
                return activationPanel;
313
        }
314
        
315
        public JCheckBox getCbActiveSharpening() {
316
                if (cbActiveSharpening == null) {
317
                        cbActiveSharpening = new JCheckBox();
318
                        cbActiveSharpening.setText("Activar Pansharpening");
319
                        cbActiveSharpening.setPreferredSize(new java.awt.Dimension(150,23));
320
                        cbActiveSharpening.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
321
                }
322
                return cbActiveSharpening;
323
        }
324
        
325
        
326
        private JPanel getPSharpSouth() {
327
                if (pSharpSouth == null) {
328
                        GridBagConstraints gridBagConstraints8 = new GridBagConstraints();
329
                        GridBagConstraints gridBagConstraints9 = new GridBagConstraints();
330
                        pSharpSouth = new JPanel();
331
                        pSharpSouth.setLayout(new GridBagLayout());
332
                        pSharpSouth.setPreferredSize(new java.awt.Dimension(410,62));
333
                        gridBagConstraints9.gridy = 1;
334
                        gridBagConstraints8.gridy = 0;
335
                        pSharpSouth.add(getJPanel(), gridBagConstraints8);
336
                        ButtonGroup group = new ButtonGroup();
337
                        group.add(getRbBrovey());
338
                        group.add(getRbHSL());
339
                        gridBagConstraints9.ipadx = 0;
340
                        pSharpSouth.add(getPKernel(), gridBagConstraints9);
341
                }
342
                return pSharpSouth;
343
        }
344
        /**
345
         * This method initializes jRadioButton        
346
         *         
347
         * @return javax.swing.JRadioButton        
348
         */    
349
        public JRadioButton getRbBrovey() {
350
                if (rbBrovey == null) {
351
                        rbBrovey = new JRadioButton();
352
                        rbBrovey.setText("Brovey");
353
                        rbBrovey.setPreferredSize(new java.awt.Dimension(70,23));
354
                        rbBrovey.setSelected(true);
355
                }
356
                return rbBrovey;
357
        }
358
        /**
359
         * This method initializes jRadioButton        
360
         *         
361
         * @return javax.swing.JRadioButton        
362
         */    
363
        public JRadioButton getRbHSL() {
364
                if (rbHSL == null) {
365
                        rbHSL = new JRadioButton();
366
                        rbHSL.setText("HSL");
367
                        rbHSL.setPreferredSize(new java.awt.Dimension(70,23));
368
                }
369
                return rbHSL;
370
        }
371
        /**
372
         * This method initializes jPanel        
373
         *         
374
         * @return javax.swing.JPanel        
375
         */    
376
        private JPanel getPKernel() {
377
                if (pHSL == null) {
378
                        GridBagConstraints gridBagConstraints7 = new GridBagConstraints();
379
                        GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
380
                        GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
381
                        pHSL = new JPanel();
382
                        pHSL.setLayout(new GridBagLayout());
383
                        pHSL.setPreferredSize(new java.awt.Dimension(400,30));
384
                        gridBagConstraints5.gridx = 0;
385
                        gridBagConstraints5.gridy = 0;
386
                        gridBagConstraints5.insets = new java.awt.Insets(0,0,0,0);
387
                        gridBagConstraints5.gridheight = 0;
388
                        gridBagConstraints6.gridx = 1;
389
                        gridBagConstraints6.gridwidth = 1;
390
                        gridBagConstraints6.gridy = 0;
391
                        gridBagConstraints6.weightx = 1.0;
392
                        gridBagConstraints6.fill = java.awt.GridBagConstraints.HORIZONTAL;
393
                        gridBagConstraints6.insets = new java.awt.Insets(0,0,0,0);
394
                        gridBagConstraints6.gridheight = 0;
395
                        gridBagConstraints7.weightx = 1.0D;
396
                        gridBagConstraints7.weighty = 1.0D;
397
                        gridBagConstraints7.gridwidth = 1;
398
                        gridBagConstraints7.fill = java.awt.GridBagConstraints.HORIZONTAL;
399
                        gridBagConstraints7.gridheight = 1;
400
                        gridBagConstraints7.gridy = 0;
401
                        gridBagConstraints7.gridx = 2;
402
                        pHSL.add(getJTextField(), gridBagConstraints7);
403
                        pHSL.add(getRbHSL(), gridBagConstraints5);
404
                        pHSL.add(getJSlider(), gridBagConstraints6);
405
                        this.getJSlider().setValue(0);
406
                }
407
                return pHSL;
408
        }
409
        /**
410
         * This method initializes jSlider        
411
         *         
412
         * @return javax.swing.JSlider        
413
         */    
414
        public JSlider getJSlider() {
415
                if (jSlider == null) {
416
                        jSlider = new JSlider();
417
                        jSlider.setMinimum(0);
418
                        jSlider.setPreferredSize(new java.awt.Dimension(180,16));
419
                        jSlider.setMaximum(100);
420
                        
421
                }
422
                return jSlider;
423
        }
424
        /**
425
         * This method initializes jTextField        
426
         *         
427
         * @return javax.swing.JTextField        
428
         */    
429
        public JTextField getJTextField() {
430
                if (jTextField == null) {
431
                        jTextField = new JTextField();
432
                        jTextField.setPreferredSize(new java.awt.Dimension(20,19));
433
                        jTextField.setText("0.0");
434
                }
435
                return jTextField;
436
        }
437

    
438
        
439
        /**
440
         * This method initializes jPanel        
441
         *         
442
         * @return javax.swing.JPanel        
443
         */
444
        private JPanel getJPanel() {
445
                if (pBrovey == null) {
446
                        GridBagConstraints gridBagConstraints11 = new GridBagConstraints();
447
                        gridBagConstraints11.fill = java.awt.GridBagConstraints.HORIZONTAL;
448
                        gridBagConstraints11.gridx = 2;
449
                        gridBagConstraints11.gridy = 0;
450
                        gridBagConstraints11.weighty = 1.0D;
451
                        gridBagConstraints11.weightx = 1.0;
452
                        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
453
                        gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
454
                        gridBagConstraints1.gridheight = 0;
455
                        gridBagConstraints1.gridx = 1;
456
                        gridBagConstraints1.gridy = 0;
457
                        gridBagConstraints1.weightx = 1.0;
458
                        GridBagConstraints gridBagConstraints = new GridBagConstraints();
459
                        gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER;
460
                        gridBagConstraints.gridy = 0;
461
                        gridBagConstraints.gridheight = 0;
462
                        gridBagConstraints.gridx = 0;
463
                        pBrovey = new JPanel();
464
                        pBrovey.setLayout(new GridBagLayout());
465
                        pBrovey.setPreferredSize(new java.awt.Dimension(400,30));
466
                        pBrovey.add(getRbBrovey(), gridBagConstraints);
467
                        pBrovey.add(getJSlider1(), gridBagConstraints1);
468
                        this.getJSlider1().setValue(0);
469
                        pBrovey.add(getJTextField1(), gridBagConstraints11);
470
                }
471
                return pBrovey;
472
        }
473

    
474
        /**
475
         * This method initializes jSlider1        
476
         *         
477
         * @return javax.swing.JSlider        
478
         */
479
        public JSlider getJSlider1() {
480
                if (slBrovey == null) {
481
                        slBrovey = new JSlider();
482
                        slBrovey.setMaximum(100);
483
                        slBrovey.setPreferredSize(new java.awt.Dimension(180,16));
484
                        
485
                }
486
                return slBrovey;
487
        }
488

    
489
        /**
490
         * This method initializes jTextField1        
491
         *         
492
         * @return javax.swing.JTextField        
493
         */
494
        public JTextField getJTextField1() {
495
                if (jTextField1 == null) {
496
                        jTextField1 = new JTextField();
497
                        jTextField1.setPreferredSize(new java.awt.Dimension(20,19));
498
                        jTextField1.setText("0");
499
                }
500
                return jTextField1;
501
        }
502
        
503
        
504
        
505
        /*
506
         * Actualiza por si hay variaciones*/
507
        private void refresh() {
508
                setLayer(fLayer);
509
                
510
        }
511

    
512
        /*
513
         * (non-Javadoc)
514
         * @see org.gvsig.rastertools.properties.dialog.IRegistrablePanel#getID()
515
         */
516
        public String getID() {
517
                return id;
518
        }
519

    
520
        /*
521
         * (non-Javadoc)
522
         * @see org.gvsig.rastertools.properties.dialog.IRegistrablePanel#selectTab(java.lang.String)
523
         */
524
        public void selectTab(String id) {
525
                if (this.id.equals(id))
526
                        refresh();
527
                
528
        }
529

    
530
        public void accept() {
531
                pansharpControl.accept();
532
        }
533

    
534
        /**
535
         * Aplicar los cambios sin guardar su estado
536
         */
537
        public void apply() {
538
                pansharpControl.apply();
539
        }
540

    
541
        public void cancel() {
542
                pansharpControl.cancel();
543
        }
544

    
545
        public void setComponentSize(int w, int h) {
546
                
547
        }
548
        
549
        
550
        public void setLayer(FLayer lyr) {
551
                fLayer = lyr;
552
                RasterFilterList rfl = null;
553
                clear();
554
                if (lyr instanceof IRasterRendering) {
555
                        if (((IRasterRendering) lyr).existColorTable()) {
556
                                pansharpControl.init(null, null, lyr);
557
                                this.setEnabled(false);
558
                                return;
559
                        }
560
                }
561

    
562
                this.setEnabled(true);
563

    
564
                if (lyr instanceof IRasterProperties)
565
                        prop = (IRasterProperties) lyr;
566

    
567
                if (lyr instanceof IRasterDataset) {
568
                        dataset = (IRasterDataset) lyr;
569
                        addFiles(dataset.getGeoRasterMultiDataset());
570
                }
571
                if(lyr instanceof IRasterProperties)
572
                        rfl = (((IRasterProperties)lyr).getRenderFilterList());
573
                
574
                pansharpControl= new PanSharpeningControl(this, dataset,prop, lyr, rfl);
575
                
576
        }
577

    
578
        /**
579
         * Elimina todas las entradas de la tabla de bandas.
580
         */
581
        private void clear() {
582
                int rows = ((DefaultTableModel) getBandTable().getModel()).getRowCount();
583
                if (rows > 0) {
584
                        for (int i = 0; i < rows; i++)
585
                                ((DefaultTableModel) getBandTable().getModel()).removeRow(0);
586
                }
587
        }
588
        
589
        
590
        
591
         class RadioColumnEditor extends AbstractCellEditor implements TableCellEditor {
592
                        final private static long serialVersionUID = -3370601314380922368L;
593
                        public JRadioButton       theRadioButton;
594

    
595
                        public RadioColumnEditor() {
596
                                super();
597
                                theRadioButton = new JRadioButton();
598
                                theRadioButton.addActionListener(new ActionListener() {
599
                                        public void actionPerformed(ActionEvent event) {
600
                                                fireEditingStopped();
601
                                                //setMode(mode);
602
                                                //onlyApply();
603
                                        }
604
                                });
605
                        }
606

    
607
                        public Component getTableCellEditorComponent(JTable table, Object obj, boolean isSelected, int row, int col) {
608
                                theRadioButton.setHorizontalAlignment(SwingUtilities.CENTER);
609

    
610
                                Boolean lValueAsBoolean = (Boolean) obj;
611
                                theRadioButton.setSelected(lValueAsBoolean.booleanValue());
612

    
613
                                return theRadioButton;
614
                        }
615

    
616
                        public Object getCellEditorValue() {
617
                                return new Boolean(theRadioButton.isSelected());
618
                        }
619
                }
620

    
621
                class RadioColumnRenderer extends JRadioButton implements TableCellRenderer {
622
                        final private static long serialVersionUID = -3370601314380922368L;
623

    
624
                        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
625
                                if (value == null) {
626
                                        this.setSelected(false);
627
                                }
628

    
629
                                Boolean ValueAsBoolean = (Boolean) value;
630
                                this.setSelected(ValueAsBoolean.booleanValue());
631
                                this.setHorizontalAlignment(SwingConstants.CENTER);
632

    
633
                                return this;
634
                        }
635
                }
636
                
637
                  // Modelo de la tabla que contiene las bandas
638
            class BandTableModel extends DefaultTableModel {
639
                        final private static long serialVersionUID = -3370601314380922368L;
640
                         // String de con las cabeceras de la tabla
641
                         
642
                        public BandTableModel() {
643
                                super(new Object[0][2], columnNames);
644
                        }
645

    
646
                        public Class getColumnClass(int c) {
647
                                if (c < 1) {
648
                                        return Boolean.class;
649
                                }
650

    
651
                                return String.class;
652
                        }
653

    
654

    
655
                         public void addNew() {
656
                            super.addRow(new Object[] { new Boolean(false), ""});
657
                        }
658
                         
659
                         public void addRow(){
660
                                addRow(new Object[] { new Boolean(false), ""});
661
                                 
662
                         }
663
                        public void setValueAt(Object value, int row, int col) {
664
                                if ((col < 1) && ((Boolean) value).booleanValue()) {
665
                                        for (int i = 0; i < getRowCount(); i++) {
666
                                                if (i != row) {
667
                                                        setValueAt(new Boolean(false), i, col);
668
                                                }
669
                                        }
670
                                }
671

    
672
                                super.setValueAt(value, row, col);
673
                        }                
674
                }
675

    
676
                public void tableChanged(TableModelEvent arg0) {
677
                        
678
                }
679

    
680
}
681