Statistics
| Revision:

root / trunk / libraries / libCq_CMS_praster / src / org / cresques / ui / raster / DataInputProps.java @ 8026

History | View | Annotate | Download (22.7 KB)

1
/*
2
 * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
3
 *
4
 * Copyright (C) 2004-5.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
19
 *
20
 * For more information, contact:
21
 *
22
 * cresques@gmail.com
23
 */
24
package org.cresques.ui.raster;
25

    
26
import java.awt.BorderLayout;
27
import java.awt.Dimension;
28
import java.awt.FlowLayout;
29

    
30
import javax.swing.JComboBox;
31
import javax.swing.JPanel;
32

    
33
import org.cresques.io.CXMLParser;
34
import org.cresques.io.GeoRasterWriter;
35

    
36

    
37
/*
38
 * Created on 04-mar-2005
39
 *
40
 */
41

    
42
/**
43
 * Panel que contiene las propiedades de un driver de escritura.
44
 * Este panel se monta a partir de un XML que es solicitado al driver
45
 * porque dependiendo del driver tendr? unas propiedades u otras.
46
 * Los elementos del panel son XMLObjects que se almacenan en
47
 * vectores. El XML se procesa con la clase ProcessXML que ser? la
48
 * encargada a partir del texto en XML de crear los XMLObjects que
49
 * compondran el panel.
50
 * @author Nacho Brodin <brodin_ign@gva.es>
51
 */
52
public class DataInputProps extends JPanel {
53
    final private static long serialVersionUID = -3370601314380922368L;
54
    private GeoRasterWriter writer = null;
55
    private String formato = null;
56
    private JPanel jPanel = null;
57
    private JPanel panelSup = null;
58
    private JComboBox jComboBox = null;
59
    private XMLPanel[] panels = null;
60
    private XMLCombo[] combos = null;
61
    private XMLLabel[] labels = null;
62
    private XMLSlider[] sliders = null;
63
    private XMLCheck[] checks = null;
64
    private XMLText[] texts = null;
65

    
66
    public DataInputProps(){};
67
    
68
    public DataInputProps(GeoRasterWriter writer) {
69
        super();
70
        this.writer = writer;
71
        this.formato = writer.getIdent();
72

    
73
        ProcessXML pXML = new ProcessXML(writer.getXMLPropertiesDialog());
74
        panels = pXML.getPanels();
75
        labels = pXML.getLabels();
76
        combos = pXML.getCombos();
77
        sliders = pXML.getSliders();
78
        checks = pXML.getChecks();
79
        texts = pXML.getTexts();
80
        initialize();
81
        addComponents();
82

    
83
        //showElements();
84
    }
85

    
86
    /**
87
     * Inicializa el panel central con los datos del primer panel de la lista
88
     */
89
    private void initialize() {
90
        for (int i = 0; i < this.panels.length; i++) {
91
            if (i == 0) {
92
                if (panels[i].layout.equals("FlowLayout")) {
93
                    this.setLayout(new FlowLayout());
94
                }
95

    
96
                if (panels[i].layout.equals("BorderLayout")) {
97
                    this.setLayout(new BorderLayout());
98
                }
99
                this.setPreferredSize(new Dimension(panels[i].sizex, panels[i].sizey));
100
                this.setSize(panels[i].sizex, panels[i].sizey);
101
            } else {
102
                if ((panels[i].position != null) &&
103
                        !panels[i].position.equals("")) {
104
                    this.add(panels[i], panels[i].position);
105
                } else {
106
                    this.add(panels[i]);
107
                }
108
            }
109
        }
110
    }
111

    
112
    /**
113
     * A?ade los componentes de los vectores al panel
114
     *
115
     */
116
    public void addComponents() {
117
        for (int iPanel = 1; iPanel < panels.length; iPanel++) {
118
            int nElemInsert = 0;
119

    
120
            while (nElemInsert < panels[iPanel].nElements) {
121
                for (int i = 0; i < labels.length; i++) {
122
                    if ((labels[i].numPanel == iPanel) &&
123
                            (labels[i].posIntoPanel == nElemInsert)) {
124
                        if ((labels[i].position != null) &&
125
                                !labels[i].position.equals("")) {
126
                            panels[iPanel].add(labels[i], labels[i].position);
127
                        } else {
128
                            panels[iPanel].add(labels[i]);
129
                        }
130

    
131
                        nElemInsert++;
132
                    }
133
                } //for(int i=0;i<labels.length;i++)
134

    
135
                for (int i = 0; i < combos.length; i++) {
136
                    if ((combos[i].numPanel == iPanel) &&
137
                            (combos[i].posIntoPanel == nElemInsert)) {
138
                        if ((combos[i].position != null) &&
139
                                !combos[i].position.equals("")) {
140
                            panels[iPanel].add(combos[i], combos[i].position);
141
                        } else {
142
                            panels[iPanel].add(combos[i]);
143
                        }
144

    
145
                        nElemInsert++;
146
                    }
147
                } //for(int i=0;i<combos.length;i++)
148

    
149
                for (int i = 0; i < sliders.length; i++) {
150
                    if ((sliders[i].numPanel == iPanel) &&
151
                            (sliders[i].posIntoPanel == nElemInsert)) {
152
                        if ((sliders[i].position != null) &&
153
                                !sliders[i].position.equals("")) {
154
                            panels[iPanel].add(sliders[i], sliders[i].position);
155
                        } else {
156
                            panels[iPanel].add(sliders[i]);
157
                        }
158

    
159
                        nElemInsert++;
160
                    }
161
                } //for(int i=0;i<sliders.length;i++)
162

    
163
                for (int i = 0; i < checks.length; i++) {
164
                    if ((checks[i].numPanel == iPanel) &&
165
                            (checks[i].posIntoPanel == nElemInsert)) {
166
                        if ((checks[i].position != null) &&
167
                                !checks[i].position.equals("")) {
168
                            panels[iPanel].add(checks[i], checks[i].position);
169
                        } else {
170
                            panels[iPanel].add(checks[i]);
171
                        }
172

    
173
                        nElemInsert++;
174
                    }
175
                } //for(int i=0;i<checks.length;i++)
176

    
177
                for (int i = 0; i < texts.length; i++) {
178
                    if ((texts[i].numPanel == iPanel) &&
179
                            (texts[i].posIntoPanel == nElemInsert)) {
180
                        if ((texts[i].position != null) &&
181
                                !texts[i].position.equals("")) {
182
                            panels[iPanel].add(texts[i], texts[i].position);
183
                        } else {
184
                            panels[iPanel].add(texts[i]);
185
                        }
186

    
187
                        nElemInsert++;
188
                    }
189
                } //for(int i=0;i<checks.length;i++)
190
            } //while(nElemInsert<panels[iPanel].nElements)
191
        } //for(int iPanel=1;iPanel<panels.length;iPanel++)
192
    }
193

    
194
    /**
195
     * Obtiene el n?mero de componentes que recogen propiedades
196
     * para el driver cargado
197
     * @return        N?mero de componentes
198
     */
199
    public int getNElements() {
200
        return (combos.length + sliders.length + checks.length + texts.length);
201
    }
202

    
203
    /**
204
     * Obtiene los identificadores de las propiedades del cuadro de dialogo
205
     * @return        Lista con los identificadores de propiedades
206
     */
207
    public String[] getElements() {
208
        String[] lista = new String[this.getNElements()];
209

    
210
        for (int i = 0; i < combos.length; i++)
211
            lista[i] = combos[i].id + "=" +
212
                       combos[i].getSelectedItem().toString();
213

    
214
        for (int i = 0; i < sliders.length; i++)
215
            lista[combos.length + i] = sliders[i].id + "=" +
216
                                       sliders[i].getSlider().getValue();
217

    
218
        for (int i = 0; i < checks.length; i++) {
219
            String sel = null;
220

    
221
            if (checks[i].isSelected()) {
222
                sel = new String("yes");
223
            } else {
224
                sel = new String("no");
225
            }
226

    
227
            lista[combos.length + sliders.length + i] = checks[i].id + "=" +
228
                                                        sel;
229
        }
230

    
231
        for (int i = 0; i < texts.length; i++)
232
            lista[i] = texts[i].id + "=" + texts[i].getText();
233

    
234
        return lista;
235
    }
236

    
237
    /**
238
     * Obtiene la lista de Combos
239
     * @return XMLCombo[]
240
     */
241
    public XMLCombo[] getCombos() {
242
        return combos;
243
    }
244

    
245
    /**
246
     * Obtiene la lista de Sliders
247
     * @return XMLSlider[]
248
     */
249
    public XMLSlider[] getSliders() {
250
        return sliders;
251
    }
252

    
253
    /**
254
     * Obtiene la lista de CheckBoxs
255
     * @return XMLCheck[]
256
     */
257
    public XMLCheck[] getChecks() {
258
        return checks;
259
    }
260

    
261
    /**
262
     * Muestra informaci?n sobre los elementos a?adidos al panel
263
     *
264
     */
265
    public void showElements() {
266
        for (int i = 0; i < panels.length; i++)
267
            System.out.println("PANEL " + i + " NElem=" + panels[i].nElements);
268

    
269
        for (int i = 0; i < labels.length; i++)
270
            System.out.println("LABEL " + i + " Panel=" + labels[i].numPanel +
271
                               " PosIntoPanel=" + labels[i].posIntoPanel);
272

    
273
        for (int i = 0; i < combos.length; i++)
274
            System.out.println("COMBO " + i + " Panel=" + combos[i].numPanel +
275
                               " PosIntoPanel=" + combos[i].posIntoPanel);
276

    
277
        for (int i = 0; i < checks.length; i++)
278
            System.out.println("CHECK " + i + " Panel=" + checks[i].numPanel +
279
                               " PosIntoPanel=" + checks[i].posIntoPanel);
280

    
281
        for (int i = 0; i < sliders.length; i++)
282
            System.out.println("SLIDER " + i + " Panel=" + sliders[i].numPanel +
283
                               " PosIntoPanel=" + sliders[i].posIntoPanel);
284
    }
285
}
286

    
287

    
288
/**
289
 * Clase para procesar el XML que manda un driver de escritura y
290
 * que corresponde a la ventana de dialogo para las propiedades del mismo.
291
 *
292
 * @author Nacho Brodin <brodin_ign@gva.es>
293
 *
294
 */
295
class ProcessXML {
296
    private XMLPanel[] panels = null;
297
    private XMLCombo[] combos = null;
298
    private XMLLabel[] labels = null;
299
    private XMLSlider[] sliders = null;
300
    private XMLCheck[] checks = null;
301
    private XMLText[] texts = null;
302
    private int contPanels = 0;
303
    private int contCombos = 0;
304
    private int contLabels = 0;
305
    private int contSliders = 0;
306
    private int contChecks = 0;
307
    private int contTexts = 0;
308

    
309
    /**
310
     * Constructor
311
     * @param XML        XML correspondiente a la ventana de dialogo
312
     */
313
    public ProcessXML(String XML) {
314
        CXMLParser parser = new CXMLParser(XML);
315

    
316
        //Reservamos memoria para el n?mero de paneles
317
        panels = new XMLPanel[parser.getNumTags("panel")];
318
        combos = new XMLCombo[parser.getNumTags("combo")];
319
        labels = new XMLLabel[parser.getNumTags("label")];
320
        sliders = new XMLSlider[parser.getNumTags("slider")];
321
        checks = new XMLCheck[parser.getNumTags("check")];
322
        texts = new XMLText[parser.getNumTags("text")];
323

    
324
        String valor = parser.getValue("window", true);
325

    
326
        while (!valor.equals("")) {
327
            String tag = parser.getTag();
328

    
329
            if (tag.equals("panel")) {
330
                processPanel(parser);
331
            } else if (tag.equals("label")) {
332
                processLabel(parser);
333
            } else if (tag.equals("combo")) {
334
                processCombo(parser);
335
            } else if (tag.equals("check")) {
336
                processCheck(parser);
337
            } else if (tag.equals("slider")) {
338
                processSlider(parser);
339
            } else if (tag.equals("text")) {
340
                processText(parser);
341
            } else if (tag.equals("")) {
342
                valor = new String("");
343
            } else {
344
                valor = parser.getXML();
345
            }
346
        }
347

    
348
        if (!valor.equals("")) {
349
            System.err.println("Se ha interrumpido el proceso!!!");
350
        }
351
    }
352

    
353
    /**
354
     * Obtiene los paneles leidos del XML como objetos XMLPanel
355
     * @return        Listado de XMLPanel
356
     */
357
    public XMLPanel[] getPanels() {
358
        return panels;
359
    }
360

    
361
    /**
362
     * Obtiene los combos leidos del XML como objetos XMLCombo
363
     * @return        Listado de XMLCombo
364
     */
365
    public XMLCombo[] getCombos() {
366
        return combos;
367
    }
368

    
369
    /**
370
     * Obtiene los label leidos del XML como objetos XMLLabel
371
     * @return        Listado de XMLLabel
372
     */
373
    public XMLLabel[] getLabels() {
374
        return labels;
375
    }
376

    
377
    /**
378
     * Obtiene los slider leidos del XML como objetos XMLSlider
379
     * @return        Listado de XMLSlider
380
     */
381
    public XMLSlider[] getSliders() {
382
        return sliders;
383
    }
384

    
385
    /**
386
     * Obtiene los checks leidos del XML como objetos XMLCheks
387
     * @return        Listado de XMLCheck
388
     */
389
    public XMLCheck[] getChecks() {
390
        return checks;
391
    }
392

    
393
    /**
394
     * Obtiene los texts leidos del XML como objetos XMLText
395
     * @return        Listado de XMLText
396
     */
397
    public XMLText[] getTexts() {
398
        return texts;
399
    }
400

    
401
    /**
402
     * Procesa un tag panel
403
     * @param parser        Objeto parser con el XML
404
     */
405
    public void processPanel(CXMLParser parser) {
406
        panels[contPanels] = new XMLPanel();
407

    
408
        String sizex = parser.getAttr("panel", "sizex");
409
        String sizey = parser.getAttr("panel", "sizey");
410

    
411
        if ((sizex != null) && !sizex.equals("")) {
412
            panels[contPanels].sizex = Integer.parseInt(sizex);
413
        }
414

    
415
        if ((sizey != null) && !sizey.equals("")) {
416
            panels[contPanels].sizey = Integer.parseInt(sizey);
417
        }
418

    
419
        panels[contPanels].layout = parser.getAttr("panel", "layout");
420
        panels[contPanels].border = parser.getAttr("panel", "border");
421
        panels[contPanels].position = parser.getAttr("panel", "position");
422
        panels[contPanels].align = parser.getAttr("panel", "align");
423
        panels[contPanels].init();
424
        contPanels++;
425

    
426
        //System.out.println("PANEL="+sizex+"X"+sizey+" Layout="+layout+" Border="+border+" Pos="+position+" Align="+align);
427
        parser.getValue("panel", true);
428
    }
429

    
430
    /**
431
         * Procesa un tag label
432
         * @param parser        Objeto parser con el XML
433
         */
434
    public void processLabel(CXMLParser parser) {
435
        labels[contLabels] = new XMLLabel();
436

    
437
        //Posicionamiento. En q panel y su posici?n dentro de este
438
        labels[contLabels].numPanel = contPanels - 1;
439
        panels[contPanels - 1].nElements++;
440
        labels[contLabels].posIntoPanel = panels[contPanels - 1].nElements - 1;
441

    
442
        labels[contLabels].position = parser.getAttr("label", "position");
443
        labels[contLabels].text = parser.getValue("label", true);
444
        labels[contLabels].init();
445
        contLabels++;
446
    }
447

    
448
    /**
449
     * Procesa un tag combo
450
     * @param parser        Objeto parser con el XML
451
     */
452
    public void processCombo(CXMLParser parser) {
453
        combos[contCombos] = new XMLCombo();
454

    
455
        //Posicionamiento. En q panel y su posici?n dentro de este
456
        combos[contCombos].numPanel = contPanels - 1;
457
        panels[contPanels - 1].nElements++;
458
        combos[contCombos].posIntoPanel = panels[contPanels - 1].nElements - 1;
459

    
460
        combos[contCombos].selected = parser.getAttr("combo", "selected");
461
        combos[contCombos].position = parser.getAttr("combo", "position");
462
        combos[contCombos].id = parser.getAttr("combo", "ident");
463

    
464
        String sizex = parser.getAttr("combo", "sizex");
465
        String sizey = parser.getAttr("combo", "sizey");
466

    
467
        if ((sizex != null) && !sizex.equals("")) {
468
            combos[contCombos].sizex = Integer.parseInt(sizex);
469
        }
470

    
471
        if ((sizey != null) && !sizey.equals("")) {
472
            combos[contCombos].sizey = Integer.parseInt(sizey);
473
        }
474

    
475
        String valoresCombo = parser.getValue("combo", true);
476

    
477
        processComboValues(parser, combos[contCombos]);
478
        combos[contCombos].init();
479
        contCombos++;
480
    }
481

    
482
    /**
483
     * Procesa los elementos de un combo
484
     * @param parser        Objeto parser con el XML
485
     * @param combo        Objeto XMLCombo del cual se procesan los elementos
486
     */
487
    public void processComboValues(CXMLParser parser, XMLCombo combo) {
488
        String elem = parser.getValue("elem", true);
489

    
490
        if (elem != null) {
491
            combo.addItem(elem);
492
        }
493

    
494
        if (parser.getTag().equals("elem")) {
495
            processComboValues(parser, combo);
496
        }
497
    }
498

    
499
    /**
500
     * Procesa un tag check
501
     * @param parser        Objeto parser con el XML
502
     */
503
    public void processCheck(CXMLParser parser) {
504
        String select = parser.getAttr("check", "selected");
505

    
506
        if (select.equals("yes")) {
507
            checks[contChecks] = new XMLCheck(parser.getAttr("check", "text"),
508
                                              true);
509
        } else {
510
            checks[contChecks] = new XMLCheck(parser.getAttr("check", "text"),
511
                                              false);
512
        }
513

    
514
        checks[contChecks].position = parser.getAttr("check", "position");
515
        checks[contChecks].id = parser.getAttr("check", "ident");
516

    
517
        String sizex = parser.getAttr("check", "sizex");
518
        String sizey = parser.getAttr("check", "sizey");
519

    
520
        if ((sizex != null) && !sizex.equals("")) {
521
            checks[contChecks].sizex = Integer.parseInt(sizex);
522
        }
523

    
524
        if ((sizey != null) && !sizey.equals("")) {
525
            checks[contChecks].sizey = Integer.parseInt(sizey);
526
        }
527

    
528
        parser.getValue("check", true);
529

    
530
        //Posicionamiento. En q panel y su posici?n dentro de este
531
        checks[contChecks].numPanel = contPanels - 1;
532
        panels[contPanels - 1].nElements++;
533
        checks[contChecks].posIntoPanel = panels[contPanels - 1].nElements - 1;
534

    
535
        checks[contChecks].init();
536
        contChecks++;
537
    }
538

    
539
    /**
540
     * Procesa un tag slider
541
     * @param parser        Objeto parser con el XML
542
     */
543
    public void processSlider(CXMLParser parser) {
544
        String min = null;
545
        String max = null;
546
        String value = null;
547
        String minorspacing = null;
548
        String majorspacing = null;
549
        String name = parser.getAttr("slider", "name");
550
        String id = parser.getAttr("slider", "ident");
551
        String position = parser.getAttr("slider", "position");
552
        String sizex = parser.getAttr("slider", "sizex");
553
        String sizey = parser.getAttr("slider", "sizey");
554
        String elem = parser.getValue("slider", true);
555

    
556
        String tag = parser.getTag();
557

    
558
        while (tag.equals("min") || tag.equals("max") || tag.equals("value") ||
559
                   tag.equals("minorspacing") || tag.equals("majorspacing")) {
560
            if (tag.equals("min")) {
561
                min = parser.getValue("min", true);
562
            }
563

    
564
            if (tag.equals("max")) {
565
                max = parser.getValue("max", true);
566
            }
567

    
568
            if (tag.equals("value")) {
569
                value = parser.getValue("value", true);
570
            }
571

    
572
            if (tag.equals("minorspacing")) {
573
                minorspacing = parser.getValue("minorspacing", true);
574
            }
575

    
576
            if (tag.equals("majorspacing")) {
577
                majorspacing = parser.getValue("majorspacing", true);
578
            }
579

    
580
            tag = parser.getTag();
581
        }
582

    
583
        sliders[contSliders] = new XMLSlider(name, min, max, value,
584
                                             minorspacing, majorspacing);
585
        sliders[contSliders].position = position;
586
        sliders[contSliders].id = id;
587

    
588
        if ((sizex != null) && !sizex.equals("")) {
589
            sliders[contSliders].sizex = Integer.parseInt(sizex);
590
        }
591

    
592
        if ((sizey != null) && !sizey.equals("")) {
593
            sliders[contSliders].sizey = Integer.parseInt(sizey);
594
        }
595

    
596
        //Posicionamiento. En q panel y su posici?n dentro de este
597
        sliders[contSliders].numPanel = contPanels - 1;
598
        panels[contPanels - 1].nElements++;
599
        sliders[contSliders].posIntoPanel = panels[contPanels - 1].nElements -
600
                                            1;
601

    
602
        contSliders++;
603
    }
604

    
605
    /**
606
    * Procesa un tag text
607
    * @param parser        Objeto parser con el XML
608
    */
609
    public void processText(CXMLParser parser) {
610
        texts[contTexts] = new XMLText(parser.getAttr("text", "text"));
611

    
612
        String sizex = parser.getAttr("text", "sizex");
613
        String sizey = parser.getAttr("text", "sizey");
614

    
615
        if ((sizex != null) && !sizex.equals("")) {
616
            texts[contTexts].sizex = Integer.parseInt(sizex);
617
        }
618

    
619
        if ((sizey != null) && !sizey.equals("")) {
620
            texts[contTexts].sizey = Integer.parseInt(sizey);
621
        }
622

    
623
        //Posicionamiento. En q panel y su posici?n dentro de este
624
        texts[contTexts].numPanel = contPanels - 1;
625
        panels[contPanels - 1].nElements++;
626
        texts[contTexts].posIntoPanel = panels[contPanels - 1].nElements - 1;
627

    
628
        texts[contTexts].position = parser.getAttr("text", "position");
629
        texts[contTexts].text = parser.getValue("text", true);
630
        texts[contTexts].init();
631
        contTexts++;
632
    }
633
}
634

    
635

    
636
/**
637
 * Clase que representa a un panel obtenido a partir del XML
638
 * que manda un driver de escritura.
639
 *
640
 * @author Nacho Brodin <brodin_ign@gva.es>
641
 *
642
 */
643
class XMLPanel extends JPanel {
644
    final private static long serialVersionUID = -3370601314380922368L;
645
    public int sizex = 0;
646
    public int sizey = 0;
647
    public String layout = null;
648
    public String border = null;
649
    public String position = null;
650
    public String align = null;
651
    public int nElements = 0;
652

    
653
    /**
654
     * Inicializaci?n del XMLPanel
655
     *
656
     */
657
    public void init() {
658
        if (layout.equals("FlowLayout")) {
659
            FlowLayout fl = new FlowLayout();
660
            this.setLayout(fl);
661

    
662
            if (align.equals("left")) {
663
                fl.setAlignment(java.awt.FlowLayout.LEFT);
664
            } else if (align.equals("center")) {
665
                fl.setAlignment(java.awt.FlowLayout.CENTER);
666
            } else if (align.equals("right")) {
667
                fl.setAlignment(java.awt.FlowLayout.RIGHT);
668
            } else if (align.equals("leading")) {
669
                fl.setAlignment(java.awt.FlowLayout.LEADING);
670
            } else if (align.equals("trailing")) {
671
                fl.setAlignment(java.awt.FlowLayout.TRAILING);
672
            }
673
        } else if (layout.equals("BorderLayout")) {
674
            this.setLayout(new BorderLayout());
675
        }
676

    
677
        if ((sizex != 0) && (sizey != 0)) {
678
            this.setPreferredSize(new java.awt.Dimension(sizex, sizey));
679
        }
680

    
681
        if (border.equals("yes")) {
682
            this.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,
683
                                                                      1));
684
        }
685
    }
686
}
687

    
688

    
689

    
690

    
691

    
692

    
693

    
694