0% found this document useful (0 votes)
2 views64 pages

Introduction to Java Swing GUI Basics

The document outlines a course on Advanced Programming focusing on GUI development using Swing in Java. It covers the introduction to GUI, Swing components, event handling, and the differences between JavaFX, AWT, and Swing. Additionally, it provides details on creating and managing JFrame, JPanel, and various GUI components like buttons and menus.

Uploaded by

melatkidu80
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views64 pages

Introduction to Java Swing GUI Basics

The document outlines a course on Advanced Programming focusing on GUI development using Swing in Java. It covers the introduction to GUI, Swing components, event handling, and the differences between JavaFX, AWT, and Swing. Additionally, it provides details on creating and managing JFrame, JPanel, and various GUI components like buttons and menus.

Uploaded by

melatkidu80
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd

Faculty of

Sep 20, 2025


Computing &
Software
Eng’g
Program:
Information
Advanced Programming

Technology
G3 IT
(Regular)

Instructor:
Addisu M. (Asst.
Prof) 1
2
Ch ro

GUI using Swing


ap
Ze
te
r
Outline

Advanced Programming Sep 20, 2025


 Introduction to GUI
 Introduction to Swing
 Introduction to Component,
Container, Panels, Window, Frame
 Implementation of JFrame and
Adding Component
 Event Handling 3
Introduction to GUI

Advanced Programming Sep 20, 2025


 GUI (Graphical User Interface) – visual interface to
program
 built from GUI components (buttons, scrollbars,
menus, labels, text fields, etc)
 GUI component – an object with which the user
interacts via mouse or keyboard
 gives an application a distinctive “look and feel”
 appearance and how user interacts with the
program are know as the program “look and feel”
 provides user-friendly human interaction
 were the initial motivation for OOP
predefined classes for GUI components, event 4
Introduction to GUI

Advanced Programming Sep 20, 2025


 Building
GUIs require use of GUI frameworks:
JavaFX
Older Java frameworks:
Abstract Window Toolkit (AWT):
[Link].*, [Link].*,
[Link].*
SWING:
[Link].*, [Link].*
 Classes that are used to create GUI components
are part of [Link] or [Link] package
 Both packages provide rich set of user interface 5
GUI vs Non-GUI

Advanced Programming Sep 20, 2025


 Classes present in AWT and Swing
packages can be classified into two broad
categories
 GUI classes – visible and user can interact
with them
 Example: Jbutton, JFrame & JRadioButton,
etc
 Non-GUI support classes – provide
6
JavaFX vs AWT and Swing

Advanced Programming Sep 20, 2025


Swing & AWT were older frameworks replaced
by JavaFX platform for developing rich Internet
applications in JDK8
When Java was introduced, GUI classes were
bundled in a library known as Abstract Windows
Toolkit (AWT)
AWT was prone to platform-specific bugs
AWT was fine for developing simple GUIs, but not
for developing comprehensive GUI projects.
AWT user-interface components were replaced by a
more robust, versatile, & flexible library known as
Swing components
Swing components depended less on the 7
JavaFX vs AWT and Swing

Advanced Programming Sep 20, 2025


JavaFX vs AWT and Swing

Advanced Programming Sep 20, 2025


CHARACTERISTIC AWT SWING JavaFX
Platform Platform
DEPENDENCY Platform Dependent
Independent Independent
WEIGHT OF
Heavyweight Lightweight Lightweight
COMPONENT
CURRENTLY IN Use It In A Few
Discarded Currently In Use
USE Places.
Support Pluggable Support Pluggable
Does Not Support A Look And Feel. Look And Feel.
PLUGGABLE Pluggable Look And Components Look Components Look
Feel The Same On All The Same On All
Systems Systems.
Does Not Follow
MVC Follow MVC Follow MVC.
MVC
NO. OF More Than AWT But
Less More Than AWT
COMPONENTS Less Than SWING.
PACKAGE [Link] [Link] [Link] 9
What is Swing?

Advanced Programming Sep 20, 2025


 set of classes that provides more powerful and
flexible GUI than AWT
 use to develop a better efficient & newest GUI
components
 Swing components
 written, manipulated and displayed completely in
java
 therefore also called pure java components
 called as light weight components which
improve performance of the application because
amount of resources required is very minimum
 Not depend on OS – manipulated & displayed completely
in Java 10
Hierarchy of Swing Classes

Advanced Programming Sep 20, 2025


11
Java GUI API

Advanced Programming Sep 20, 2025


• GUI API contains classes that can be
classified into three groups:
 Container classes,

 Component classes, and

 Helper classes

12
Container Classes

Advanced Programming Sep 20, 2025


• base class for all Swing containers
• a specialized component that holds other
components like buttons, textfields, labels
etc at their specific locations
• Top containers: JWindow, JFrame, JDialog,
and JApplet
 Note:
 A container itself is a component, therefore
we can add a container inside container
• four types of containers
3. Frame :
1. Window 4. Dialog 13
Container Classes

Advanced Programming Sep 20, 2025


• JFrame – a top-level window with title and
border
 has decorations (close, icon,
minimize/maximize)
 Rectangular resizable Box contain title bar &
border and can have menu bars
 Every frame by default will contain a title,
minimize, maximize and close Buttons
 By default the size of frame OXO (zero by
zero) pixels
 can have other components like button, text
14
Container Classes

Advanced Programming Sep 20, 2025


• JFrame
 Commonly Used Method(s):
 setTitle(String title), setSize(width, height)
 setDefaultCloseOperation(int op)
 most widely used while developing an Swing
application
 default size is (0,0) - have to set its size before
using it
 default visibility status is false (i.e. not visible)
 have to set its visibility to true
 default layout manager is BorderLayout – can
be changed
 can be created in two ways:
 Create the object of Frame by Instantiating Frame 15
Container Classes

Advanced Programming Sep 20, 2025


• JFrame
 When closing JFrame, the frame is hidden but is
still existing and running (holding GUI resources)
 To close the frame and end the application either
register a window listener or specify a close behavior
 method setDefaultCloseOperation(intop) – used
to specify closing behavior of the JFrame, you may
pass one of the ff static variables as parameter:
 DISPOSE_ON_CLOSE: to close the current frame but
doesn’t terminate the application
 DO_NOTHING_ON_CLOSE: to ignore the closing operation
 EXIT_ON_CLOSE: to exit appln (close all frame &
terminate appln)
 HIDE_ON_CLOSE: to just hide the frame (default 16
Container Classes

Advanced Programming Sep 20, 2025


• Creating JFrame – 2 ways to create JFrame
Window
1. by Instantiating JFrame class
import [Link].*; //importing swing package
public class First {
JFrame jf;
public First() {
jf = new JFrame("MyWindow");//Creating with
title
JButton btn = new JButton("Say Hello");//Creating
Button 17
Container Classes

Advanced Programming Sep 20, 2025


 Creating JFrame – 2 ways to create JFrame
Window
1. by Instantiating JFrame class
[Link](JFrame.EXIT_ON_CLO
SE);//setting close operation
[Link](400, 400); //setting size
[Link](true);//setting visibility
}
public static void main(String[] args) {
new First();
}
} 18
Container Classes

Advanced Programming Sep 20, 2025


 Creating JFrame – 2 ways to create JFrame
Window
2. by extending JFrame class
import [Link].*; //importing swing package
public class Second extends JFrame {
public Second() {
setTitle("MyWindow"); //setting title of frame
JLabel lb = new JLabel("Welcome to My Second
Window"); //Creating a label named Welcome to My
Second Window
add(lb); //adding label to frame.
setLayout(new FlowLayout()); //setting layout using 19
Container Classes

Advanced Programming Sep 20, 2025


 Creating JFrame – 2 ways to create JFrame
Window
2. by extending JFrame class
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //
setting close operation.
setSize(400, 400);//setting size
setVisible(true);//setting visibility
}
public static void main(String[] args) {
new Second();
}
20
Container Classes

Advanced Programming Sep 20, 2025


 Points to note in Creating JFrame:
 Import [Link] package to use the classes
and methods of Swing
 While creating a frame, the following two
attributes are a must for visibility of the frame:
setSize(int width, int height);
setVisible(true);
 When you create components like Buttons,
TextFields, etc, you need to add it to the frame by
using the method
add(Component's Object);
 You can add the following method also for resizing 21
Container Classes

Advanced Programming Sep 20, 2025


• JPanel – used to group certain related
components together over the main
container of the application
 doesn't contain title bar, border or menu bar
 blank rectangular component that can
contain other components.
• ff code is used to populate a container
with components:

[Link](anyComponent) 23
Container Classes

Advanced Programming Sep 20, 2025


• Dialog – used to create a top-level container
Dialog window which contains a set of
components
 main function of a dialog box is to retrieve
some input from the user
 input can be an acknowledgment that they
have read a message or something they enter
into a text area
 a perfect tool for collecting or displaying
important information
• Java provides several classes to create dialog 24
Container Classes

Advanced Programming Sep 20, 2025


• JOptionPane Class
 You can create using one of several static methods
belonging to the JOptionPane class, include:
• showMessageDialog() – relays a message to the
user
• showConfirmDialog() – asks question that requires
confirmation
• showInputDialog() – prompts a user for input
 It provides standard dialog boxes, it has many options
allowing you to tweak its behavior
• INFORMATION_MESSAGE - default
• ERROR_MESSAGE
• WARNING_MESSAGE 25
Container Classes

Advanced Programming Sep 20, 2025


• JOptionPane Class
public class JOptionPaneApp {
JOptionPaneApp() {
JFrame frame = new JFrame();
[Link](frame, "This is a
JOptionPane message window.", "Error",
JOptionPane.ERROR_MESSAGE);
}
public static void main(String[] args) {
new JOptionPaneApp();
}
Exampl 26
}
Container Classes

Advanced Programming Sep 20, 2025


//A program which shows several JOptionPane
windows on the screen
String name = [Link](null, "What is
ur name?");
// ask the user a yes/no question
int choice = [Link](null, "Do you
like java, " + name + "?");
if (choice == JOptionPane.YES_OPTION) {
[Link](null, “Thank you!!!");
}
else { // choice == NO_OPTION or CANCEL_OPTIONExampl
27
[Link](null, “Please, get
Container Classes

Advanced Programming Sep 20, 2025


 Methods of Swing classes
 Commonly Used Method(s) from container
class:
 void add(Component comp)
 void add(Component comp, Object
constraints)
 void setLayout(LayoutManager mgr)
 Commonly Used Method(s) from component
class:
 void setSize(intwidth, intheight)
 void setLocation(intx, inty)
 void setBounds(intx, inty, intw, inth) 28
Component Classes

Advanced Programming Sep 20, 2025


• JMenubar, JMenu, JMenuItem
 For Menubar JMenuBar:
 used to crate a menu bar which can contain
some menus
 JFrame, JDialog, and JApplet can all have menu
bars
 To set Menu Bar use the following method:
setJMenuBar(JMenuBarjbar)
 Commonly Used Constructor(s): JMenuBar()
 Commonly Used Method(s):
 JMenuadd(JMenum)
 Int getMenuCount()
 JMenu getMenu(int index) 29
Component Classes

Advanced Programming Sep 20, 2025


• JMenubar, JMenu, JMenuItem
 For MenuItem JMenuItem:
 used to create menu items which can be placed
on to menu
 Creation of JMenu:
JMenuItem newItem = new
JMenuItem(“New”);
 To add menu to the menu bar
[Link](newItem);
 Commonly Used Constructor(s):
 JMenuItem() , JMenuItem(String
label)
 JMenuItem(String label, intmnemonic) 30
Component Classes

Advanced Programming Sep 20, 2025


• JMenubar, JMenu, JMenuItem
//A program to create Menu items
JFrame f = new JFrame(); Exampl
JMenuItem a1, a2; e
JMenu menu = new JMenu("Edit");
JMenuBar m1 = new JMenuBar();
a1 = new JMenuItem("Cut");
a2 = new JMenuItem("Copy");
[Link](a1);
[Link](a2);
[Link](menu);
[Link](m1); 31
Component Classes

Advanced Programming Sep 20, 2025


JLabel
 can be used to display text and/or icon.
 a passive component – does not respond to
user input
 Constructors:
JLabel(Icon icon);
JLabel(String str);
JLabel(String str, Icon icon, int align)
 Icon & str  icon and text used for label
 To obtain an icon, and object of ImageIcon class
has to be passed as an argument to the Icon
parameter. 32
Component Classes

Advanced Programming Sep 20, 2025


JButton
 Functionality of a push button
 An icon/string or both can be associated with a
button
 Constructors
JButton(Icon str)
JButton(String str)
JButton(String str, Icon icon)
 Creation of JButton: JButton jb = new
JBtton(label);
 Event Generated:
 when button is pressed ActionEvent object is
generated 33
Component Classes

Advanced Programming Sep 20, 2025


JCheckBox
• allows to select multiple item from group
 Any number of check boxes in a group — none,
some, or all — can be selected
 Creation of JCheckBox:
JCbeckBox jcb = new JCheckBox();
JCbeckBox jcb = new JCheckBox(Label);
JCbeckBox jcb = new JCheckBox(Label,boolean);
 Event Generated:
 It generates one item event and one action event
per click
 Usually, you listen only for item events, since they
let you determine whether the click selected or
deselected check box 34

Component Classes

Advanced Programming Sep 20, 2025


JRadioButton
 are groups of buttons in which, by convention, only
one button at a time can be selected
 Swing release JRadioButton and ButtonGroup
classes
• JRadioButton: allows to select only 1 item from
group items
 Creation of JRadioButton:
JRadioButton jrb = new JRadioButton();
JRadioButton jrb = new JRadioButton(Label);
JRadioButton jrb = new JRadioButton(Label,boolean);
• ButtonGroup: used to place multiple buttons into a
single group in which only one button at a time can be
selected 35
 Creation of ButtonGroup:
Component Classes

Advanced Programming Sep 20, 2025


JComboBox
 choose one of several choices; can have two different
forms
 uneditable combo box – features button & drop-
down list of values
 editable – features text field with small button
abutting it
 user can type a value in the text field or click the
button to display a drop-down list
 Swing provides a combo box (a combination of a text
field and a drop-down list) through the JComboBox
class
 Constructors: JComboBox() & JComboBox(Object[]) 36
Component Classes

Advanced Programming Sep 20, 2025


JTextField
 A text field can be used to enter or display a string

JTextField firstName = new JTextField(20);


JTextField surName = new JTextField(20);
JTextField address = new JTextField(60);
JPanel p=new JPanel();
[Link](firstName);
[Link](surName);
[Link](address);
37
Component Classes

Advanced Programming Sep 20, 2025


JPasswordField

JPasswordField userName = new JPasswordField(20);


JFrame f=new JFrame(“Example 01”);
[Link](userName);//adds the password field to a
container 38
Component Classes

Advanced Programming Sep 20, 2025


JList
 A list is a component that basically performs
the same function as a combo box, but it
enables the user to choose a single value or
multiple values.
String[] str = {“Kebede", “Zeleke", “Aster",
“Lakech"};
JList list=new JList(str);
JPanel p=new JPanel();
[Link](list);
39
Helper Classes

Advanced Programming Sep 20, 2025


• used to support GUI Components
• They are used to describe the properties
of GUI components, such as graphics
context, colors, fonts, and dimension
• Example: Graphics, color, Font,
FontMetrics, Dimension, and
LayoutManager
• not sub-classes of Component
• used to describe the properties of GUI
40
41
Layouts
refers to the arrangement of components
within the container.
task of laying out the controls is done

Advanced Programming
automatically by Layout Manager
Layout Manager
automatically positions all the components within
the container.
Even if you do not use the layout manager,
components are still positioned by the default
layout manager.
possible to lay out the controls by hand, however,
it becomes very difficult because of the ff two
reasons
42
Layouts
list of commonly used Layout Manager
Classes
Layout
Description
Manager

Advanced Programming
arranges components to fit in the five regions:
BorderLayout
east, west, north, south, and center
default layout, it layout in a directional flow,
FlowLayout
either from left to right or from right to left
GridLayout manages in the form of a rectangular grid.
aligns them vertically, horizontally, or along
GridBagLayou
their baseline without requiring components of
t
the same size.
hierarchically groups in order to position them
GroupLayout
in a Container
43
Layouts
FlowLayout
all components are set to one row

Advanced Programming
JFrame frame = new JFrame("Layout");
// Define new buttons
JButton jb1 = new JButton("Button 1");
JButton jb2 = new JButton("Button 2");
JButton jb3 = new JButton("Button 3");
// Define the panel to hold the buttons
JPanel panel = new JPanel();
[Link](new FlowLayout());
 If you want to see the output for different alignment, what you need to do
is simply setting up size of the window to a relative larger one and then
you can change the parameter of FlowLayout to be [Link],
or [Link] or [Link].
44
Layouts
BorderLayout
lays out a container, arranging its components to

Advanced Programming
fit into five regions: NORTH, SOUTH, EAST, WEST
and CENTER.
For each region, it may contain no more than one
component.
When adding different components, you need to
specify the orientation of it to be the one of the
45
Layouts // Define new buttons with different
regions
JButton jb1 = new
BorderLayout JButton("NORTH");
JButton jb2 = new JButton("SOUTH");
JButton jb3 = new

Advanced Programming
JButton("WEST");
JButton jb4 = new JButton("EAST");
JButton jb5 = new
JButton("CENTER");
// Define the panel to hold the buttons
JPanel panel = new JPanel();
[Link](new
BorderLayout());
[Link](jb1, [Link]);
[Link](jb2, [Link]);
[Link](jb3, [Link]);
[Link](jb4, [Link]);
46
Layouts

Advanced Programming
Anatomy of an
Application GUI

Advanced Programming Sep 20, 2025


Internal structure
JFrame
JFrame

JPanel containers

JPanel
JButton

JButton JLabel
JLabel

47
Event Handling

Advanced Programming Sep 20, 2025


 Events – actions usually triggered by user
when interacting with application
• E.g., buttons, menus, sliders, mouse clicks, ... all
generate events when the user does something
with them. o Pressing a key
 Events: o sliding the scrollbar thumb
 Moving the mouse o choosing an item from a
 Clicking the button menu
 Press a button o Selecting an item form a
list etc
• import Statements: to use events, you must
import:- 48
Event Handling

Advanced Programming Sep 20, 2025


 Event handling – mechanism that controls event
and decides what should happen if an event
occurs
 activity of capturing events and take
appropriate action as per requirements (e.g.
Print a message)
 have the code (known as event handler) that is
executed when an event occurs
• Steps to Handle Event in Java
1. Whenever the user clicks the button an event
is generated
2. The object of the concerned event class will be
automatically created and information about
the source and the event gets populated within 49
Event Handling

Advanced Programming Sep 20, 2025


 To perform any operation, component has to
listen to the event that is generated
 But the component can not listen to the events
that are generated
 So, take the help of the listeners which are
interfaces which can listen to the events that
are generated
 After the listener listens, it delegates (passes)
the event information to one of the method
available in that listener
 This process is called as “Event Delegation
Model” 50
Event Handling

Advanced Programming Sep 20, 2025


 Event Delegation Model has three parts:
• Events
• Events Sources
• Events Listeners

51
Event Handling

Advanced Programming Sep 20, 2025


 Event Delegation Model has three parts:
• Events
• changes that we make when interacting with
application
• objects that define state change in a source
• an action that occurs within a GUI, such as a
button click, a key press, or a mouse
movement
• triggered either by external user actions
(e.g., mouse movements, button clicks and
keystrokes) or by internal program
activities (timer) 52
Event Handling

Advanced Programming Sep 20, 2025


 Event Delegation Model has three parts:
• Events Sources
 an object (such as button, text field, or menu
item, timers,…) that generates an event
 When an event is triggered on an event source,
the event is encapsulated in an event object
and passed to all the registered event listeners
or handlers
 Event source is responsible for notifying the
event listeners or handlers of the event and
providing them with the information they need
to handle the event
• Events Listeners – also known as event
handler
• object that is registered to event source 53
Event Handling

Advanced Programming Sep 20, 2025


 Event Delegation Model has three parts:
• Events Listeners – also known as event
handler
• When event occurs on event source, event
listener is notified and performs the necessary
actions to respond to event
• Event listener is typically implemented as a
class that implements a specific event listener
interface, such as ActionListener,
MouseListener, or KeyListener
• Each interface specifies a set of methods that
the event listener must implement to handle the
event 54

Event Handling

Advanced Programming Sep 20, 2025


Example: When the user clicks the
button,
• JButton object generates an ActionEvent object
• then calls listener object’s actionPerformed()
method and passes that method the event
object just generated
• registration method form:
addTypeListener(TypeListener el)
Type: name of event & el: reference to
event listener
 ActionListener interface contains the 55
Event Handling

Advanced Programming Sep 20, 2025


Example: When the user clicks the
button
public HandleEvent() {
JButton jbtOK = new JButton("OK");
JPanel panel = new JPanel();
[Link](jbtOK); Create
Listener
add(panel); // Add panel to the frame
OkListenerClass listener1 = new
OkListenerClass();
[Link](listener1);Register
} Listener
Process public void actionPerformed(ActionEvent e) {
Event [Link]
 object listener1 is an ("Hello
instanceWorld");
of OKListenerClass,
} which is registered with button jbtOK
 When OK button is clicked,
actionPerformed(ActionEvent) method in 56
Event Handling

Advanced Programming Sep 20, 2025


•Listener Interfaces
Source Event Type
User Action
Object Generated
Click a button JButton ActionEvent
ItemEvent,
Click a check box JCheckBox
ActionEvent
ItemEvent,
Click a radio button JRadioButton
ActionEvent
Press return on a text
JTextField ActionEvent
field
ItemEvent,
Select a new item JComboBox
ActionEvent
Window opened, closed,
57
Event Handling

Advanced Programming Sep 20, 2025


•Listener Interfaces
addXXXListener
User Control (interface to be method in listener
implemented)
Button, TextField, actionPerformed(ActionEvent
addActionListener()
MenuItem e)
CheckBox addItemListener() itemstateChanged()
keyPressed(), keyReleased(),
key on component addKeyListener()
keyTyped()
mouseClicked(),
mouse on
addMouseListener() mousePressed(),
component
mouseReleased(), …
mouse on addMouseMotionListen mouseMoved(),
component er() mouseDragged()
windowClosing(WindowEvent 58
Event Handling

Advanced Programming Sep 20, 2025


 Three Code-Approaches

Within Class – implemented in single


class

Other Class – implemented using


another class

Anonymous Class – implemented in


an inner class which does not
contains any name
59
Event Handling

Advanced Programming Sep 20, 2025


• Within Class
Example
import [Link].*;
class EventHandling extends JFrame implements
ActionListener {
JTextField textField;
EventHandling () {
textField = new JTextField ();
[Link] (60, 50, 170, 20);
JButton button = new JButton ("Show");
[Link] (90, 140, 75, 40);
[Link] (this);
add (button); add (textField);
60
Event Handling

Advanced Programming Sep 20, 2025


• Within Class Example
setSize (250, 250);
setLayout (null);
setVisible (true);
}
public void actionPerformed (ActionEvent e) {
[Link] ("Hello World");
}
public static void main (String args[]) {
new EventHandling ();
}
}
After Clicking, text field value is set to 61
Event Handling

Advanced Programming Sep 20, 2025


• Anonymous Class Example
import [Link].*; add(b);add(tf);
class AEvent3 extends JFrame{ setSize(300,300);
JTextField tf; setLayout(null);
AEvent3(){ setVisible(true);
tf=new JTextField(); }
[Link](60,50,170,20); public static void main(String ar
JButton b=new JButton("click me");gs[]){
[Link](50,120,80,30); new AEvent3();
}
[Link](new ActionListener(){
}
public void actionPerformed(){
[Link]("hello");
}
}); 62
Event Handling

Advanced Programming Sep 20, 2025


• Other Class Example
import [Link].*;
class MyClass extends JFrame{
JTextField tf;
MyClass(){
tf = new JTextField();
[Link](60,50,170,20);
setSize(300,300);
JButton b = new JButton("click me");
[Link](100,120,80,30); setLayout(null);
setVisible(true);
Outer o = new Outer(this);
}
[Link](o); public static void main(String
add(b); args[]){
add(tf); new MyClass();
} 63
Event Handling

Advanced Programming Sep 20, 2025


• Other Class Example
import [Link].*;
class Outer implements ActionListener{
MyClass obj;
Outer(MyClass obj){
[Link] = obj;
}
public void actionPerformed(ActionEvent e){
[Link]("Hello, outher here.");
}
} 64
65

THANKS
!
Questions,
Ambiguities,
Doubts, … ???

You might also like