Statistics
| Revision:

root / trunk / extensions / extGeoProcessing / src / com / iver / cit / gvsig / geoprocess / dissolve / gui / GeoProcessingDissolvePanel.java @ 5412

History | View | Annotate | Download (18.6 KB)

1 5412 azabala
/*
2
 * Created on 14-jul-2005
3
 *
4
 * gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
5
 *
6
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
7
 *
8
 * This program is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU General Public License
10
 * as published by the Free Software Foundation; either version 2
11
 * of the License, or (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program; if not, write to the Free Software
20
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
21
 *
22
 * For more information, contact:
23
 *
24
 *  Generalitat Valenciana
25
 *   Conselleria d'Infraestructures i Transport
26
 *   Av. Blasco Ib??ez, 50
27
 *   46010 VALENCIA
28
 *   SPAIN
29
 *
30
 *      +34 963862235
31
 *   gvsig@gva.es
32
 *      www.gvsig.gva.es
33
 *
34
 *    or
35
 *
36
 *   IVER T.I. S.A
37
 *   Salamanca 50
38
 *   46005 Valencia
39
 *   Spain
40
 *
41
 *   +34 963163400
42
 *   dac@iver.es
43
 */
44
package com.iver.cit.gvsig.geoprocess.dissolve.gui;
45
46
import java.awt.Component;
47
import java.awt.event.ActionEvent;
48
import java.awt.event.ActionListener;
49
import java.io.File;
50
import java.util.ArrayList;
51
import java.util.HashMap;
52
import java.util.Map;
53
import java.util.Set;
54
55
import javax.swing.DefaultComboBoxModel;
56
import javax.swing.JButton;
57
import javax.swing.JCheckBox;
58
import javax.swing.JComboBox;
59
import javax.swing.JFileChooser;
60
import javax.swing.JLabel;
61
import javax.swing.JList;
62
import javax.swing.JScrollPane;
63
import javax.swing.JTextField;
64
65
import com.hardcode.gdbms.engine.data.DataSource;
66
import com.iver.andami.PluginServices;
67
import com.iver.andami.ui.mdiManager.View;
68
import com.iver.andami.ui.mdiManager.ViewInfo;
69
import com.iver.cit.gvsig.fmap.DriverException;
70
import com.iver.cit.gvsig.fmap.layers.FBitSet;
71
import com.iver.cit.gvsig.fmap.layers.FLayers;
72
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
73
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
74
import com.iver.cit.gvsig.fmap.layers.layerOperations.AlphanumericData;
75
import com.iver.cit.gvsig.geoprocess.core.fmap.SummarizationFunction;
76
import com.iver.cit.gvsig.geoprocess.core.fmap.XTypes;
77
import com.iver.cit.gvsig.geoprocess.core.gui.AbstractGeoprocessPanel;
78
import com.iver.cit.gvsig.geoprocess.core.gui.NumericFieldListModel;
79
import com.iver.cit.gvsig.geoprocess.core.gui.SumFuncListModel;
80
import com.iver.cit.gvsig.geoprocess.core.gui.SumarizeFunctionsDialog;
81
import com.iver.utiles.GenericFileFilter;
82
import javax.swing.JPanel;
83
import java.awt.GridBagLayout;
84
import java.awt.GridBagConstraints;
85
86
/**
87
 * Panel to work with DissolveGeoprocess in Geoprocessing Wizard.
88
 *
89
 * Precondition: all inputs layer of constructor must be FLyrVect
90
 *
91
 * @author azabala
92
 *
93
 */
94
public class GeoProcessingDissolvePanel extends AbstractGeoprocessPanel implements
95
                DissolvePanelIF, View {
96
97
        private static final long serialVersionUID = 1L;
98
99
        private JLabel titleJLabel = null;
100
101
        private JLabel inputCoverJLabel = null;
102
        /**
103
         * Allows user to specify if a dissolve precondition
104
         * in two polygons with the same dissolve field value must
105
         * be spatial adjacency
106
         */
107
        private JCheckBox onlySelectedItemsJCheckBox = null;
108
109
110
        private JLabel dissolveFieldJLabel = null;
111
        /**
112
         * Allows user to specify dissolve field
113
         */
114
        private JComboBox dissolveFieldJComboBox = null;
115
116
        private JScrollPane additionalOperationsJScrollPane = null;
117
118
        private JList numericFieldJList = null;
119
120
        private JTextField outputCoverJTextField = null;
121
122
        private JButton outputCoverJButton = null;
123
124
        private File outputFile = null;
125
126
        private JScrollPane sumarizationFunctionScrollPane = null;
127
128
        private JList sumarizeFunctionsJList;
129
130
        private JButton sumFunctionSelectionJButton = null;
131
132
        private SumarizeFunctionsDialog sumarizeFuncDialog = null;
133
134
        /**
135
         * Relates a numeric field with its sumarize functions
136
         */
137
        private Map nField_sumFuntionList = null;
138
139
        private ViewInfo viewInfo;
140
141
        private JPanel resultLayerPanel = null;
142
143
        private JLabel jLabel = null;
144
145
        private JPanel sumarizeAttributesPanel = null;
146
147
        private JLabel jLabel1 = null;
148
149
        private JLabel jLabel2 = null;
150
151
        private JCheckBox adjacencyCheckbox = null;
152
        /**
153
         * This constructor initializes the set of layers
154
         *
155
         * TODO PRECONDITION: check for only FLyrVect layers
156
         *
157
         *
158
         */
159
        public GeoProcessingDissolvePanel(FLayers layers) {
160
                super();
161
                this.layers = layers;
162
                initialize();
163
        }
164
165
        /**
166
         * This method initializes this
167
         *
168
         * @return void
169
         */
170
        private void initialize() {
171
                dissolveFieldJLabel = new JLabel();
172
                dissolveFieldJLabel.setBounds(5, 93, 180, 22);
173
                dissolveFieldJLabel.setText(PluginServices.getText(this,
174
                                "Campo_para_disolver")
175
                                + ":");
176
                inputCoverJLabel = new JLabel();
177
                inputCoverJLabel.setBounds(5, 36, 191, 22);
178
                inputCoverJLabel.setText(PluginServices.getText(this,
179
                                "Cobertura_de_entrada")
180
                                + ":");
181
                titleJLabel = new JLabel();
182
                titleJLabel.setBounds(5, 5, 208, 22);
183
                titleJLabel.setText(PluginServices.getText(this,
184
                                "Disolver._Introduccion_de_datos")
185
                                + ":");
186
                this.setLayout(null);
187
                this.setBounds(new java.awt.Rectangle(0,0,486,377));
188
                this.add(titleJLabel, null);
189
                this.add(inputCoverJLabel, null);
190
                this.add(getInputCoverJComboBox(), null);
191
                this.add(getOnlySelectedItemsJCheckBox(), null);
192
                this.add(dissolveFieldJLabel, null);
193
                this.add(getDissolveFieldJComboBox(), null);
194
                this.add(getResultLayerPanel(), null);
195
                this.add(getSumarizeAttributesPanel(), null);
196
                this.add(getAdjacencyCheckbox(), null);
197
                this.nField_sumFuntionList = new HashMap();
198
                layersComboBox.setSelectedIndex(0);
199
                inputLayerSelectedChange();
200
                // initSelectedItemsJCheckBox();
201
        }
202
203
        private String[] getFieldNames() {
204
                AlphanumericData lyr = (AlphanumericData) getInputLayer();
205
                DataSource ds;
206
                String[] fieldNames = null;
207
                try {
208
                        ds = lyr.getRecordset();
209
                        fieldNames = new String[ds.getFieldCount()];
210
                        for (int i = 0; i < ds.getFieldCount(); i++) {
211
                                fieldNames[i] = ds.getFieldName(i);
212
                        }
213
                } catch (DriverException e) {
214
                        e.printStackTrace();
215
                } catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
216
                        e.printStackTrace();
217
                }
218
                return fieldNames;
219
        }
220
221
        /**
222
         * Says if adjacency checkbox has been checked by
223
         * user
224
         * @return
225
         */
226
        public boolean onlyAdjacentSelected(){
227
                return adjacencyCheckbox.isSelected();
228
        }
229
230
        private void initSelectedItemsJCheckBox() {
231
                FLyrVect inputSelectable = (FLyrVect) getInputLayer();
232
                FBitSet fBitSet = null;
233
                try {
234
                        fBitSet = inputSelectable.getRecordset().getSelection();
235
                } catch (DriverException e) {
236
                        // TODO Auto-generated catch block
237
                        e.printStackTrace();
238
                }
239
                if (fBitSet.cardinality() == 0) {
240
                        onlySelectedItemsJCheckBox.setEnabled(false);
241
                } else {
242
                        onlySelectedItemsJCheckBox.setEnabled(true);
243
                }
244
                onlySelectedItemsJCheckBox.setSelected(false);
245
        }
246
247
        /**
248
         * This method initializes inputCoverJComboBox
249
         *
250
         * @return javax.swing.JComboBox
251
         */
252
        private JComboBox getInputCoverJComboBox() {
253
                if (layersComboBox == null) {
254
                        layersComboBox = new JComboBox();
255
                        DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(
256
                                        getLayerNames());
257
                        layersComboBox.setModel(defaultModel);
258
                        layersComboBox.setBounds(144, 36, 241, 22);
259
                        layersComboBox
260
                                        .addItemListener(new java.awt.event.ItemListener() {
261
                                                public void itemStateChanged(java.awt.event.ItemEvent e) {
262
                                                        inputLayerSelectedChange();
263
                                                }
264
                                        });
265
                }
266
                return layersComboBox;
267
        }
268
269
        /**
270
         * This method initializes onlySelectedItemsJCheckBox
271
         *
272
         * @return javax.swing.JCheckBox
273
         */
274
        private JCheckBox getOnlySelectedItemsJCheckBox() {
275
                if (onlySelectedItemsJCheckBox == null) {
276
                        onlySelectedItemsJCheckBox = new JCheckBox();
277
                        onlySelectedItemsJCheckBox.setBounds(5, 64, 351, 22);
278
                        onlySelectedItemsJCheckBox.setText(PluginServices.getText(this,
279
                                        "Usar_solamente_los_elementos_seleccionados"));
280
                }
281
                return onlySelectedItemsJCheckBox;
282
        }
283
284
        /**
285
         * This method initializes dissolveFieldJComboBox
286
         *
287
         * @return javax.swing.JComboBox
288
         */
289
        private JComboBox getDissolveFieldJComboBox() {
290
                if (dissolveFieldJComboBox == null) {
291
                        dissolveFieldJComboBox = new JComboBox();
292
                        DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(
293
                                        getFieldNames());
294
                        dissolveFieldJComboBox.setModel(defaultModel);
295
                        dissolveFieldJComboBox.setBounds(227, 93, 241, 22);
296
                }
297
                return dissolveFieldJComboBox;
298
        }
299
300
        /**
301
         * This method initializes additionalOperationsJScrollPane
302
         *
303
         * @return javax.swing.JScrollPane
304
         */
305
        private JScrollPane getAdditionalOperationsJScrollPane() {
306
                if (additionalOperationsJScrollPane == null) {
307
                        additionalOperationsJScrollPane = new JScrollPane();
308
                        additionalOperationsJScrollPane
309
                                        .setViewportView(getNumericFieldJList());
310
                        additionalOperationsJScrollPane.setEnabled(false);
311
                        additionalOperationsJScrollPane.setBounds(new java.awt.Rectangle(14,36,139,112));
312
                }
313
                return additionalOperationsJScrollPane;
314
        }
315
316
        /**
317
         * This method initializes numericFieldJList
318
         *
319
         * @return javax.swing.JList
320
         */
321
        private JList getNumericFieldJList() {
322
                if (numericFieldJList == null) {
323
                        numericFieldJList = new JList();
324
                }
325
                return numericFieldJList;
326
        }
327
328
        /**
329
         * This method initializes outputCoverJTextField
330
         *
331
         * @return javax.swing.JTextField
332
         */
333
        private JTextField getOutputCoverJTextField() {
334
                if (outputCoverJTextField == null) {
335
                        outputCoverJTextField = new JTextField();
336
                }
337
                return outputCoverJTextField;
338
        }
339
340
        /**
341
         * This method initializes outputCoverJButton
342
         *
343
         * @return javax.swing.JButton
344
         */
345
        private JButton getOutputCoverJButton() {
346
                if (outputCoverJButton == null) {
347
                        outputCoverJButton = new JButton();
348
                        outputCoverJButton
349
                                        .addActionListener(new java.awt.event.ActionListener() {
350
                                                public void actionPerformed(java.awt.event.ActionEvent e) {
351
                                                        openResultFile();
352
                                                }
353
                                        });
354
                        outputCoverJButton.setText(PluginServices.getText(this, "Abrir"));
355
                }
356
                return outputCoverJButton;
357
        }
358
359
        /**
360
         * @return Returns the outputFile.
361
         */
362
        public File getOutputFile() {
363
                return outputFile;
364
        }
365
366
        public void openResultFile() {
367
                // FIXME This code is similar in all GeoProcessingXXXPanels.
368
                // Create an utility class
369
                JFileChooser jfc = new JFileChooser();
370
                // FIXME Internationalize "Ficheros SHP" String
371
                jfc
372
                                .addChoosableFileFilter(new GenericFileFilter("shp",
373
                                                "Ficheros SHP"));
374
                if (jfc.showSaveDialog((Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
375
                        File file = jfc.getSelectedFile();
376
                        if (!(file.getPath().endsWith(".shp") || file.getPath().endsWith(
377
                                        ".SHP"))) {
378
                                file = new File(file.getPath() + ".shp");
379
                        }
380
                        outputFile = file;
381
                }
382
                if (jfc.getSelectedFile() != null) {
383
                        getOutputCoverJTextField().setText(
384
                                        jfc.getSelectedFile().getAbsolutePath());
385
                }
386
387
        }
388
389
        public boolean isDissolveOnlySelected() {
390
                return onlySelectedItemsJCheckBox.isSelected();
391
        }
392
393
        public String getDissolveFieldName() {
394
                return (String) dissolveFieldJComboBox.getSelectedItem();
395
        }
396
397
        /**
398
         * Returns numeric fields' names of the selected input layer.
399
         * Needed to say user where he could apply sumarization functions.
400
         */
401
        public String[] getInputLayerNumericFields() {
402
                String[] solution;
403
                FLyrVect layer = getInputLayer();
404
                ArrayList list = new ArrayList();
405
406
                try {
407
                        SelectableDataSource recordset = layer.getRecordset();
408
                        int numFields = recordset.getFieldCount();
409
                        for (int i = 0; i < numFields; i++) {
410
                                if (XTypes.isNumeric(recordset.getFieldType(i))) {
411
                                        list.add(recordset.getFieldName(i));
412
                                }
413
                        }// for
414
                } catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
415
                        return null;
416
                } catch (DriverException e) {
417
                        return null;
418
                }
419
                solution = new String[list.size()];
420
                list.toArray(solution);
421
                return solution;
422
423
        }
424
425
        /**
426
         * This method initializes sumarizationFunctionScrollPane
427
         *
428
         * @return javax.swing.JScrollPane
429
         */
430
        private JScrollPane getSumarizationFunctionScrollPane() {
431
                if (sumarizationFunctionScrollPane == null) {
432
                        sumarizationFunctionScrollPane = new JScrollPane();
433
                        sumarizationFunctionScrollPane.setBounds(new java.awt.Rectangle(314,36,139,112));
434
                        sumarizationFunctionScrollPane
435
                                        .setViewportView(getSumarizeFunctionsJList());
436
437
                }
438
                return sumarizationFunctionScrollPane;
439
        }
440
441
        /**
442
         * Returns a list with SumarizationFunctions for each numerical field of
443
         * field lists (in the same order).
444
         *
445
         * @return
446
         */
447
        private JList getSumarizeFunctionsJList() {
448
                if (sumarizeFunctionsJList == null) {
449
                        sumarizeFunctionsJList = new JList();
450
                }
451
                return sumarizeFunctionsJList;
452
        }
453
454
        /**
455
         * This method initializes sumFunctionSelectionJButton
456
         *
457
         * @return javax.swing.JButton
458
         */
459
        private JButton getSumFunctionSelectionJButton() {
460
                if (sumFunctionSelectionJButton == null) {
461
                        sumFunctionSelectionJButton = new JButton();
462
                        sumFunctionSelectionJButton.setText(PluginServices.getText(this,
463
                                        "Escoger_Fun_Resumen"));
464
                        sumFunctionSelectionJButton.setBounds(new java.awt.Rectangle(171,69,116,22));
465
                        sumFunctionSelectionJButton.addActionListener(new ActionListener() {
466
                                public void actionPerformed(ActionEvent arg0) {
467
                                        openSumarizeFunction();
468
                                }
469
470
                        });
471
                }
472
                return sumFunctionSelectionJButton;
473
        }
474
475
        /**
476
         * Process change selection events of input layer combo box
477
         */
478
        public void inputLayerSelectedChange() {
479
                // Cambiar el estado del CheckBox
480
                initSelectedItemsJCheckBox();
481
                // Cambiar el estado del jComboBox1
482
                DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(
483
                                getFieldNames());
484
                dissolveFieldJComboBox.setModel(defaultModel);
485
                String[] numericFields = getInputLayerNumericFields();
486
                NumericFieldListModel numericListModel = new NumericFieldListModel(
487
                                numericFields);
488
                this.numericFieldJList.setModel(numericListModel);
489
490
                this.nField_sumFuntionList = new HashMap();
491
                SumFuncListModel functionListModel = new SumFuncListModel(
492
                                this.nField_sumFuntionList, numericFields);
493
                this.sumarizeFunctionsJList.setModel(functionListModel);
494
                this.sumarizeFunctionsJList.setSelectedIndex(0);
495
496
        }
497
498
        public void openSumarizeFunction() {
499
                if (sumarizeFuncDialog == null) {
500
                        sumarizeFuncDialog = new SumarizeFunctionsDialog();
501
                        sumarizeFuncDialog.pack();
502
503
                }
504
                sumarizeFuncDialog.setSize(205, 181);
505
                sumarizeFuncDialog.resetCheckbox();
506
                sumarizeFuncDialog.setVisible(true);
507
                SummarizationFunction[] functions = sumarizeFuncDialog.getFunctions();
508
509
                String fieldName = (String) this.numericFieldJList.getSelectedValue();
510
                this.nField_sumFuntionList.put(fieldName, functions);
511
512
                // Hay que refrescar la lista y el listModel
513
                String[] numericFields = getInputLayerNumericFields();
514
                SumFuncListModel functionListModel = new SumFuncListModel(
515
                                this.nField_sumFuntionList, numericFields);
516
                this.sumarizeFunctionsJList.setModel(functionListModel);
517
                this.sumarizeFunctionsJList.setSelectedIndex(0);
518
519
        }
520
521
        public String[] getFieldsToSummarize() {
522
                String[] solution = null;
523
                Set keySet = nField_sumFuntionList.keySet();
524
                solution = new String[keySet.size()];
525
                keySet.toArray(solution);
526
                return solution;
527
528
        }
529
530
        public Map getFieldFunctionMap() {
531
                return this.nField_sumFuntionList;
532
        }
533
534
        public SummarizationFunction[] getSumarizationFunctinFor(
535
                        String numericFieldName) {
536
                return (SummarizationFunction[]) nField_sumFuntionList
537
                                .get(numericFieldName);
538
        }
539
540
        public ViewInfo getViewInfo() {
541
                if (viewInfo == null) {
542
                        viewInfo = new ViewInfo(ViewInfo.MODALDIALOG);
543
                        viewInfo.setTitle(PluginServices.getText(this,
544
                                        "Disolver"));
545
                }
546
                return viewInfo;
547
        }
548
549
        /**
550
         * This method initializes resultLayerPanel
551
         *
552
         * @return javax.swing.JPanel
553
         */
554
        private JPanel getResultLayerPanel() {
555
                if (resultLayerPanel == null) {
556
                        GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
557
                        gridBagConstraints3.insets = new java.awt.Insets(14,3,9,4);
558
                        gridBagConstraints3.gridy = 0;
559
                        gridBagConstraints3.ipadx = 47;
560
                        gridBagConstraints3.ipady = 6;
561
                        gridBagConstraints3.gridx = 0;
562
                        GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
563
                        gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
564
                        gridBagConstraints2.gridx = 1;
565
                        gridBagConstraints2.gridy = 0;
566
                        gridBagConstraints2.ipadx = 173;
567
                        gridBagConstraints2.ipady = 2;
568
                        gridBagConstraints2.weightx = 1.0;
569
                        gridBagConstraints2.insets = new java.awt.Insets(14,4,9,7);
570
                        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
571
                        gridBagConstraints1.insets = new java.awt.Insets(14,7,9,21);
572
                        gridBagConstraints1.gridy = 0;
573
                        gridBagConstraints1.ipadx = 11;
574
                        gridBagConstraints1.ipady = -4;
575
                        gridBagConstraints1.gridx = 2;
576
                        jLabel = new JLabel();
577
                        jLabel.setText(PluginServices.getText(this, "Cobertura_de_salida") + ":");
578
                        resultLayerPanel = new JPanel();
579
                        resultLayerPanel.setLayout(new GridBagLayout());
580
                        resultLayerPanel.setBounds(new java.awt.Rectangle(4,296,465,45));
581
                        resultLayerPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
582
                        resultLayerPanel.add(getOutputCoverJButton(), gridBagConstraints1);
583
                        resultLayerPanel.add(getOutputCoverJTextField(), gridBagConstraints2);
584
                        resultLayerPanel.add(jLabel, gridBagConstraints3);
585
                }
586
                return resultLayerPanel;
587
        }
588
589
        /**
590
         * This method initializes sumarizeAttributesPanel
591
         *
592
         * @return javax.swing.JPanel
593
         */
594
        private JPanel getSumarizeAttributesPanel() {
595
                if (sumarizeAttributesPanel == null) {
596
                        jLabel2 = new JLabel();
597
                        jLabel2.setText(PluginServices.getText(this, "Funciones_Sumarizacion"));
598
                        jLabel2.setBounds(new java.awt.Rectangle(294,9,159,18));
599
                        jLabel1 = new JLabel();
600
                        jLabel1.setText(PluginServices.getText(this, "Atributos_Numericos"));
601
                        jLabel1.setBounds(new java.awt.Rectangle(13,9,171,18));
602
                        sumarizeAttributesPanel = new JPanel();
603
                        sumarizeAttributesPanel.setLayout(null);
604
                        sumarizeAttributesPanel.setBounds(new java.awt.Rectangle(5,142,465,151));
605
                        sumarizeAttributesPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
606
                        sumarizeAttributesPanel.add(getAdditionalOperationsJScrollPane(), null);
607
                        sumarizeAttributesPanel.add(getSumFunctionSelectionJButton(), null);
608
                        sumarizeAttributesPanel.add(getSumarizationFunctionScrollPane(), null);
609
                        sumarizeAttributesPanel.add(jLabel1, null);
610
                        sumarizeAttributesPanel.add(jLabel2, null);
611
                }
612
                return sumarizeAttributesPanel;
613
        }
614
615
        /**
616
         * This method initializes adjacencyCheckbox
617
         *
618
         * @return javax.swing.JCheckBox
619
         */
620
        private JCheckBox getAdjacencyCheckbox() {
621
                if (adjacencyCheckbox == null) {
622
                        adjacencyCheckbox = new JCheckBox();
623
                        adjacencyCheckbox.setBounds(new java.awt.Rectangle(7,121,263,18));
624
                        adjacencyCheckbox.setText(PluginServices.getText(this, "Solo_disolver_adyacentes"));
625
                }
626
                return adjacencyCheckbox;
627
        }
628
629
}  //  @jve:decl-index=0:visual-constraint="13,12"