2 Java class SpdGuidDecls is GUI for create library definition elements of spd file.
4 Copyright (c) 2006, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 package org
.tianocore
.frameworkwizard
.packaging
.ui
;
15 import java
.awt
.BorderLayout
;
16 import java
.awt
.Dimension
;
17 import java
.awt
.Toolkit
;
18 import java
.awt
.event
.ActionEvent
;
19 import java
.awt
.event
.ActionListener
;
20 import java
.awt
.event
.ComponentEvent
;
22 import java
.util
.Vector
;
24 import javax
.swing
.DefaultListModel
;
25 import javax
.swing
.JFileChooser
;
26 import javax
.swing
.JOptionPane
;
27 import javax
.swing
.JPanel
;
28 import javax
.swing
.JRadioButton
;
29 import javax
.swing
.JTable
;
30 import javax
.swing
.JTextField
;
31 import javax
.swing
.JComboBox
;
32 import javax
.swing
.JLabel
;
33 import javax
.swing
.JList
;
34 import javax
.swing
.JScrollPane
;
35 import javax
.swing
.JButton
;
36 import javax
.swing
.JFrame
;
37 import javax
.swing
.ListSelectionModel
;
38 import javax
.swing
.event
.InternalFrameAdapter
;
39 import javax
.swing
.event
.InternalFrameEvent
;
40 import javax
.swing
.event
.ListSelectionEvent
;
41 import javax
.swing
.event
.ListSelectionListener
;
42 import javax
.swing
.event
.TableModelEvent
;
43 import javax
.swing
.event
.TableModelListener
;
44 import javax
.swing
.table
.DefaultTableModel
;
45 import javax
.swing
.table
.TableModel
;
47 import org
.tianocore
.PackageSurfaceAreaDocument
;
48 import org
.tianocore
.frameworkwizard
.common
.DataType
;
49 import org
.tianocore
.frameworkwizard
.common
.Tools
;
50 import org
.tianocore
.frameworkwizard
.common
.ui
.IInternalFrame
;
51 import org
.tianocore
.frameworkwizard
.common
.ui
.StarLabel
;
52 import org
.tianocore
.frameworkwizard
.common
.ui
.iCheckBoxList
.ICheckBoxList
;
55 GUI for create library definition elements of spd file.
57 @since PackageEditor 1.0
59 public class SpdGuidDecls
extends IInternalFrame
implements TableModelListener
{
62 private SpdFileContents sfc
= null;
64 private JTable jTable
= null;
66 private DefaultTableModel model
= null;
68 private JPanel jContentPane
= null;
70 private JTextField jTextFieldAdd
= null;
72 private JScrollPane jScrollPane
= null;
74 private JButton jButtonAdd
= null;
76 private JButton jButtonRemove
= null;
78 private JButton jButtonClearAll
= null;
80 private JButton jButtonCancel
= null;
82 private JButton jButtonOk
= null;
84 private JButton jButtonGen
= null;
86 private StarLabel jStarLabel1
= null;
88 private StarLabel jStarLabel2
= null;
90 private StarLabel jStarLabel3
= null;
92 private StarLabel jStarLabel4
= null;
94 protected int selectedRow
= -1;
96 private JLabel jLabelName
= null;
98 private JScrollPane jScrollPaneModule
= null;
100 private JTextField jTextFieldName
= null;
102 private JScrollPane jScrollPaneArch
= null;
104 private JScrollPane jScrollPaneGuid
= null;
106 private JLabel jLabelGuid
= null;
108 private JScrollPane topScrollPane
= null; // @jve:decl-index=0:visual-constraint="10,213"
110 private JLabel jLabelVer
= null;
112 private GenGuidDialog guidDialog
= null;
114 private JTextField jTextFieldVersion
= null;
116 private JLabel jLabel
= null;
118 private JTextField jTextField
= null;
120 private JLabel jLabel1
= null;
122 private JLabel jLabel2
= null;
124 private ICheckBoxList iCheckBoxList
= null;
126 private ICheckBoxList iCheckBoxList1
= null;
128 private ICheckBoxList iCheckBoxList2
= null;
130 private JLabel jLabel3
= null;
135 This method initializes this
138 protected void initialize() {
140 this.setDefaultCloseOperation(javax
.swing
.WindowConstants
.DISPOSE_ON_CLOSE
);
145 This method initializes jTextFieldAdd
147 @return javax.swing.JTextField
149 protected JTextField
getJTextFieldAdd() {
150 if (jTextFieldAdd
== null) {
151 jTextFieldAdd
= new JTextField();
152 jTextFieldAdd
.setBounds(new java
.awt
.Rectangle(137,35,337,20));
153 jTextFieldAdd
.setPreferredSize(new java
.awt
.Dimension(335,20));
156 return jTextFieldAdd
;
160 This method initializes jScrollPane
162 @return javax.swing.JScrollPane
164 protected JScrollPane
getJScrollPane() {
165 if (jScrollPane
== null) {
166 jScrollPane
= new JScrollPane();
167 jScrollPane
.setBounds(new java
.awt
.Rectangle(5,256,472,196));
168 jScrollPane
.setViewportView(getJTable());
174 This method initializes jTable
176 @return javax.swing.JTable
178 protected JTable
getJTable() {
179 if (jTable
== null) {
180 model
= new DefaultTableModel();
181 jTable
= new JTable(model
);
182 jTable
.setRowHeight(20);
183 jTable
.setAutoResizeMode(javax
.swing
.JTable
.AUTO_RESIZE_OFF
);
184 model
.addColumn("Name");
185 model
.addColumn("C_Name");
186 model
.addColumn("GUID Value");
187 model
.addColumn("HelpText");
188 model
.addColumn("SupportedArch");
189 model
.addColumn("SupportedModuleType");
190 model
.addColumn("GuidTypes");
191 jTable
.getColumnModel().getColumn(2).setCellEditor(new GuidEditor());
193 jTable
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
194 jTable
.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
195 public void valueChanged(ListSelectionEvent e
) {
196 if (e
.getValueIsAdjusting()){
199 ListSelectionModel lsm
= (ListSelectionModel
)e
.getSource();
200 if (lsm
.isSelectionEmpty()) {
204 selectedRow
= lsm
.getMinSelectionIndex();
209 jTable
.getModel().addTableModelListener(this);
215 public void tableChanged(TableModelEvent arg0
) {
216 // TODO Auto-generated method stub
217 int row
= arg0
.getFirstRow();
218 TableModel m
= (TableModel
)arg0
.getSource();
219 if (arg0
.getType() == TableModelEvent
.UPDATE
){
224 protected void updateRow(int row
, TableModel m
){
225 String name
= m
.getValueAt(row
, 0) + "";
226 String cName
= m
.getValueAt(row
, 1) + "";
227 String guid
= m
.getValueAt(row
, 2) + "";
228 String help
= m
.getValueAt(row
, 3) + "";
229 String archList
= null;
230 if (m
.getValueAt(row
, 4) != null){
231 archList
= m
.getValueAt(row
, 4).toString();
233 String modTypeList
= null;
234 if (m
.getValueAt(row
, 5) != null) {
235 modTypeList
= m
.getValueAt(row
, 5).toString();
237 String guidTypeList
= null;
238 if (m
.getValueAt(row
, 6) != null){
239 guidTypeList
= m
.getValueAt(row
, 6).toString();
243 sfc
.updateSpdGuidDecl(row
, name
, cName
, guid
, help
, archList
, modTypeList
, guidTypeList
);
246 This method initializes jButtonAdd
248 @return javax.swing.JButton
250 protected JButton
getJButtonAdd() {
251 if (jButtonAdd
== null) {
252 jButtonAdd
= new JButton();
253 jButtonAdd
.setBounds(new java
.awt
.Rectangle(167,227,90,20));
254 jButtonAdd
.setText("Add");
255 jButtonAdd
.addActionListener(this);
261 This method initializes jButtonRemove
263 @return javax.swing.JButton
265 protected JButton
getJButtonRemove() {
266 if (jButtonRemove
== null) {
267 jButtonRemove
= new JButton();
268 jButtonRemove
.setBounds(new java
.awt
.Rectangle(270,227,90,20));
269 jButtonRemove
.setText("Remove");
270 jButtonRemove
.addActionListener(this);
272 return jButtonRemove
;
276 This method initializes jButtonRemoveAll
278 @return javax.swing.JButton
280 protected JButton
getJButtonClearAll() {
281 if (jButtonClearAll
== null) {
282 jButtonClearAll
= new JButton();
283 jButtonClearAll
.setBounds(new java
.awt
.Rectangle(380,227,90,20));
284 jButtonClearAll
.setText("Clear All");
285 jButtonClearAll
.addActionListener(this);
287 return jButtonClearAll
;
291 This method initializes jButtonCancel
293 @return javax.swing.JButton
295 protected JButton
getJButtonCancel() {
296 if (jButtonCancel
== null) {
297 jButtonCancel
= new JButton();
298 jButtonCancel
.setPreferredSize(new java
.awt
.Dimension(90, 20));
299 jButtonCancel
.setLocation(new java
.awt
.Point(390, 305));
300 jButtonCancel
.setText("Cancel");
301 jButtonCancel
.setSize(new java
.awt
.Dimension(90, 20));
302 jButtonCancel
.setVisible(false);
303 jButtonCancel
.addActionListener(this);
305 return jButtonCancel
;
309 This method initializes jButton
311 @return javax.swing.JButton
313 protected JButton
getJButtonOk() {
314 if (jButtonOk
== null) {
315 jButtonOk
= new JButton();
316 jButtonOk
.setSize(new java
.awt
.Dimension(90, 20));
317 jButtonOk
.setText("OK");
318 jButtonOk
.setLocation(new java
.awt
.Point(290, 305));
319 jButtonOk
.setVisible(false);
320 jButtonOk
.addActionListener(this);
326 This is the default constructor
328 public SpdGuidDecls() {
335 public SpdGuidDecls(PackageSurfaceAreaDocument
.PackageSurfaceArea inPsa
){
337 sfc
= new SpdFileContents(inPsa
);
341 This method initializes this
345 protected void init() {
346 this.setContentPane(getJContentPane());
347 this.addInternalFrameListener(new InternalFrameAdapter(){
348 public void internalFrameDeactivated(InternalFrameEvent e
){
349 if (jTable
.isEditing()) {
350 jTable
.getCellEditor().stopCellEditing();
354 this.setBounds(new java
.awt
.Rectangle(0, 0, 500, 370));
355 this.setVisible(true);
359 protected void init(SpdFileContents sfc
){
360 if (sfc
.getSpdGuidDeclarationCount() == 0) {
364 // initialize table using SpdFileContents object
366 String
[][] saa
= new String
[sfc
.getSpdGuidDeclarationCount()][7];
367 sfc
.getSpdGuidDeclarations(saa
);
369 while (i
< saa
.length
) {
370 model
.addRow(saa
[i
]);
375 protected JScrollPane
getJContentPane(){
376 if (topScrollPane
== null){
377 topScrollPane
= new JScrollPane();
378 topScrollPane
.setSize(new java
.awt
.Dimension(617,500));
379 topScrollPane
.setPreferredSize(new java
.awt
.Dimension(498,500));
380 topScrollPane
.setViewportView(getJContentPane1());
382 return topScrollPane
;
386 This method initializes jContentPane
388 @return javax.swing.JPanel
390 protected JPanel
getJContentPane1() {
391 if (jContentPane
== null) {
392 jLabel3
= new JLabel();
393 jLabel3
.setBounds(new java
.awt
.Rectangle(400,122,103,16));
394 jLabel3
.setText("GUID Type List");
395 jLabel3
.setEnabled(true);
396 jLabel2
= new JLabel();
397 jLabel2
.setBounds(new java
.awt
.Rectangle(197,122,108,16));
398 jLabel2
.setText("Supported Arch");
399 jLabel2
.setEnabled(true);
400 jLabel1
= new JLabel();
401 jLabel1
.setBounds(new java
.awt
.Rectangle(14,120,110,16));
402 jLabel1
.setText("Supported Module");
403 jLabel1
.setEnabled(true);
404 jLabel
= new JLabel();
405 jLabel
.setText("HelpText");
406 jLabel
.setSize(new java
.awt
.Dimension(109,20));
407 jLabel
.setLocation(new java
.awt
.Point(14,85));
408 jLabelVer
= new JLabel();
409 jLabelVer
.setBounds(new java
.awt
.Rectangle(14,60,111,20));
410 jLabelVer
.setText("C_Name");
411 jLabelGuid
= new JLabel();
412 jLabelGuid
.setBounds(new java
.awt
.Rectangle(15,35,112,20));
413 jLabelGuid
.setText("Guid Value");
414 jLabelName
= new JLabel();
415 jLabelName
.setBounds(new java
.awt
.Rectangle(15,10,113,20));
416 jLabelName
.setText("Name");
417 jStarLabel1
= new StarLabel();
418 jStarLabel1
.setLocation(new java
.awt
.Point(0, 10));
419 jStarLabel3
= new StarLabel();
420 jStarLabel3
.setLocation(new java
.awt
.Point(0, 35));
421 jStarLabel4
= new StarLabel();
422 jStarLabel4
.setLocation(new java
.awt
.Point(0, 60));
423 jStarLabel2
= new StarLabel();
424 jStarLabel2
.setLocation(new java
.awt
.Point(0, 85));
425 jStarLabel2
.setVisible(true);
426 jContentPane
= new JPanel();
427 jContentPane
.setLayout(null);
428 jContentPane
.setPreferredSize(new Dimension(480, 375));
429 jContentPane
.add(jStarLabel1
, null);
430 jContentPane
.add(jStarLabel2
, null);
431 jContentPane
.add(jStarLabel3
, null);
432 jContentPane
.add(jStarLabel4
, null);
433 jContentPane
.add(jLabelVer
, null);
434 jContentPane
.add(getJTextFieldVersion(), null);
435 jContentPane
.add(getJTextFieldAdd(), null);
436 jContentPane
.add(getJScrollPane(), null);
437 jContentPane
.add(getJButtonAdd(), null);
438 jContentPane
.add(getJButtonRemove(), null);
439 jContentPane
.add(getJButtonClearAll(), null);
440 jContentPane
.add(getJButtonCancel(), null);
441 jContentPane
.add(getJButtonOk(), null);
443 jContentPane
.add(getJButtonGen(), null);
444 jContentPane
.add(jLabelName
, null);
445 jContentPane
.add(getJTextFieldName(), null);
446 jContentPane
.add(jLabelGuid
, null);
447 jContentPane
.add(jLabel
, null);
448 jContentPane
.add(getJTextField(), null);
449 jContentPane
.add(jLabel1
, null);
450 jContentPane
.add(jLabel2
, null);
451 jContentPane
.add(getJScrollPaneArch(), null);
452 jContentPane
.add(getJScrollPaneGuid(), null);
453 jContentPane
.add(getJScrollPaneModule(), null);
454 jContentPane
.add(jLabel3
, null);
460 fill ComboBoxes with pre-defined contents
462 protected void initFrame() {
464 this.setTitle("GUID Declarations");
469 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
471 public void actionPerformed(ActionEvent arg0
) {
472 if (arg0
.getSource() == jButtonOk
) {
477 if (arg0
.getSource() == jButtonCancel
) {
481 if (arg0
.getSource() == jButtonAdd
) {
483 //ToDo: check before add
484 String
[] row
= {"", "", "", "", "", "", null};
485 row
[3] = jTextField
.getText();
486 row
[2] = jTextFieldAdd
.getText();
487 row
[1] = jTextFieldVersion
.getText();
488 row
[0] = jTextFieldName
.getText();
489 row
[4] = vectorToString(iCheckBoxList
.getAllCheckedItemsString());
490 if (row
[4].length() == 0) {
493 row
[5] = vectorToString(iCheckBoxList2
.getAllCheckedItemsString());
494 if (row
[5].length() == 0) {
497 if (iCheckBoxList1
.getAllCheckedItemsString() != null) {
498 row
[6] = vectorToString(iCheckBoxList1
.getAllCheckedItemsString());
504 // remove selected line
506 if (arg0
.getSource() == jButtonRemove
) {
507 if (jTable
.isEditing()){
508 jTable
.getCellEditor().stopCellEditing();
510 int rowSelected
= selectedRow
;
511 if (rowSelected
>= 0) {
512 model
.removeRow(rowSelected
);
513 removeRow(rowSelected
);
517 if (arg0
.getSource() == jButtonClearAll
) {
518 if (model
.getRowCount() == 0) {
521 model
.setRowCount(0);
525 if (arg0
.getSource() == jButtonGen
) {
526 guidDialog
= new GenGuidDialog(this);
527 guidDialog
.setGuid(jTextFieldAdd
.getText());
528 guidDialog
.setVisible(true);
531 if (arg0
.getActionCommand().equals("GenGuidValue")) {
532 jTextFieldAdd
.setText(guidDialog
.getGuid());
537 protected void addRow(String
[] row
) {
538 Vector
<String
> vArch
= iCheckBoxList
.getAllCheckedItemsString();
539 Vector
<String
> vModType
= iCheckBoxList2
.getAllCheckedItemsString();
540 Vector
<String
> vguidType
= iCheckBoxList1
.getAllCheckedItemsString();
541 sfc
.genSpdGuidDeclarations(row
[0], row
[1], row
[2], row
[3], vArch
, vModType
, vguidType
);
544 protected void removeRow(int i
){
545 sfc
.removeSpdGuidDeclaration(i
);
548 protected void clearAllRow(){
549 sfc
.removeSpdGuidDeclaration();
553 Add contents in list to sfc
555 protected void save() {
560 This method initializes jButtonBrowse
562 @return javax.swing.JButton
564 protected JButton
getJButtonGen() {
565 if (jButtonGen
== null) {
566 jButtonGen
= new JButton();
567 jButtonGen
.setBounds(new java
.awt
.Rectangle(379,58,92,21));
568 jButtonGen
.setText("Gen GUID");
569 jButtonGen
.setPreferredSize(new java
.awt
.Dimension(80,20));
570 jButtonGen
.addActionListener(this);
576 * This method initializes jTextFieldName
578 * @return javax.swing.JTextField
580 protected JTextField
getJTextFieldName() {
581 if (jTextFieldName
== null) {
582 jTextFieldName
= new JTextField();
583 jTextFieldName
.setBounds(new java
.awt
.Rectangle(138,10,337,20));
584 jTextFieldName
.setPreferredSize(new java
.awt
.Dimension(335,20));
586 return jTextFieldName
;
590 * This method initializes jTextFieldVersion
592 * @return javax.swing.JTextField
594 protected JTextField
getJTextFieldVersion() {
595 if (jTextFieldVersion
== null) {
596 jTextFieldVersion
= new JTextField();
597 jTextFieldVersion
.setBounds(new java
.awt
.Rectangle(137,60,225,20));
598 jTextFieldVersion
.setPreferredSize(new java
.awt
.Dimension(225,20));
600 return jTextFieldVersion
;
603 public void componentResized(ComponentEvent arg0
) {
604 int intPreferredWidth
= 500;
606 resizeComponentWidth(this.jTextFieldName
, this.getWidth(), intPreferredWidth
);
607 resizeComponentWidth(this.jTextFieldAdd
, this.getWidth(), intPreferredWidth
);
608 resizeComponentWidth(this.jTextFieldVersion
, this.getWidth(), intPreferredWidth
);
609 resizeComponentWidth(this.jTextField
, this.getWidth(), intPreferredWidth
);
610 resizeComponentWidth(this.jScrollPane
, this.getWidth(), intPreferredWidth
);
611 relocateComponentX(this.jButtonGen
, this.getWidth(), this.getPreferredSize().width
, 40);
616 * This method initializes jTextField
618 * @return javax.swing.JTextField
620 private JTextField
getJTextField() {
621 if (jTextField
== null) {
622 jTextField
= new JTextField();
623 jTextField
.setBounds(new java
.awt
.Rectangle(136,85,337,20));
624 jTextField
.setPreferredSize(new Dimension(335, 20));
629 private JScrollPane
getJScrollPaneArch() {
630 if (jScrollPaneArch
== null) {
631 jScrollPaneArch
= new JScrollPane();
632 jScrollPaneArch
.setBounds(new java
.awt
.Rectangle(197,142,188,74));
633 jScrollPaneArch
.setPreferredSize(new java
.awt
.Dimension(188, 74));
634 jScrollPaneArch
.setViewportView(getICheckBoxList());
636 return jScrollPaneArch
;
639 * This method initializes iCheckBoxList
641 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
643 private ICheckBoxList
getICheckBoxList() {
644 if (iCheckBoxList
== null) {
645 iCheckBoxList
= new ICheckBoxList();
646 iCheckBoxList
.setBounds(new java
.awt
.Rectangle(197,142,188,74));
647 Vector
<String
> v
= new Vector
<String
>();
653 iCheckBoxList
.setAllItems(v
);
655 return iCheckBoxList
;
658 protected JScrollPane
getJScrollPaneGuid() {
659 if (jScrollPaneGuid
== null) {
660 jScrollPaneGuid
= new JScrollPane();
661 jScrollPaneGuid
.setPreferredSize(new java
.awt
.Dimension(190,74));
662 jScrollPaneGuid
.setLocation(new java
.awt
.Point(400,142));
663 jScrollPaneGuid
.setSize(new java
.awt
.Dimension(260,74));
664 jScrollPaneGuid
.setViewportView(getICheckBoxList1());
666 return jScrollPaneGuid
;
669 * This method initializes iCheckBoxList1
671 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
673 private ICheckBoxList
getICheckBoxList1() {
674 if (iCheckBoxList1
== null) {
675 iCheckBoxList1
= new ICheckBoxList();
676 iCheckBoxList1
.setBounds(new java
.awt
.Rectangle(400,142,177,74));
677 Vector
<String
> v
= new Vector
<String
>();
678 v
.add("DATA_HUB_RECORD");
680 v
.add("EFI_SYSTEM_CONFIGURATION_TABLE");
681 v
.add("EFI_VARIABLE");
683 v
.add("HII_PACKAGE_LIST");
685 v
.add("TOKEN_SPACE_GUID");
687 iCheckBoxList1
.setAllItems(v
);
689 return iCheckBoxList1
;
692 private JScrollPane
getJScrollPaneModule() {
693 if (jScrollPaneModule
== null) {
694 jScrollPaneModule
= new JScrollPane();
695 jScrollPaneModule
.setBounds(new java
.awt
.Rectangle(14,142,170,74));
696 jScrollPaneModule
.setPreferredSize(new java
.awt
.Dimension(170, 74));
697 jScrollPaneModule
.setViewportView(getICheckBoxList2());
699 return jScrollPaneModule
;
702 * This method initializes iCheckBoxList2
704 * @return org.tianocore.frameworkwizard.common.ui.iCheckBoxList.ICheckBoxList
706 private ICheckBoxList
getICheckBoxList2() {
707 if (iCheckBoxList2
== null) {
708 iCheckBoxList2
= new ICheckBoxList();
709 iCheckBoxList2
.setBounds(new java
.awt
.Rectangle(14,142,170,74));
710 Vector
<String
> v
= new Vector
<String
>();
717 v
.add("DXE_RUNTIME_DRIVER");
718 v
.add("DXE_SAL_DRIVER");
719 v
.add("DXE_SMM_DRIVER");
720 v
.add("UEFI_DRIVER");
721 v
.add("UEFI_APPLICATION");
722 v
.add("USER_DEFINED");
723 iCheckBoxList2
.setAllItems(v
);
725 return iCheckBoxList2
;
728 public static void main(String
[] args
){
729 new SpdGuidDecls().setVisible(true);
732 protected DefaultTableModel
getModel() {
736 protected void setModel(DefaultTableModel model
) {
740 protected String
vectorToString(Vector
<String
> v
) {
742 for (int i
= 0; i
< v
.size(); ++i
) {
749 protected Vector
<String
> stringToVector(String s
){
753 String
[] sArray
= s
.split(" ");
754 Vector
<String
> v
= new Vector
<String
>();
755 for (int i
= 0; i
< sArray
.length
; ++i
) {
761 protected JLabel
getJLabel3() {