Sunteți pe pagina 1din 5

Interfee grafice Java

De la apariia limbajului Java, bibliotecile de clase care ofer servicii


grafice au suferit probabil cele mai mari schimbri n trecerea de la o
versiune la alta. Acest lucru se datoreaz, pe de o parte dificultii legate de
implementarea noiunii de portabilitate, pe de alt parte nevoii de a integra
mecanismele GUI cu tehnologii aprute i dezvoltate ulterior, cum ar fi Java
Beans. In momentul actual, exist dou modaliti de a crea o aplicaie cu
interfa grafic i anume:
. AWT (Abstract Windowing Toolkit) - este API-ul iniial pus la dispoziie
ncepnd cu primele versiuni de Java;
. Swing - este parte dintr-un proiect mai amplu numit JFC (Java Foundation
Classes) creat n urma colaborrii dintre Sun, Netscape i IBM, care se
bazeaz pe modelul AWT, extinznd funcionalitatea acestuia i adugnd
sau nlocuind unele componente pentru dezvoltarea aplicaiilor GUI.
Este preferabil ca aplicaiile Java s fie create folosind tehnologia Swing,
deoarece aceasta pune la dispoziie o palet mult mai larg de faciliti, ns
nu se va renuna complet la AWT deoarece aici exist clase eseniale,
reutilizate n Swing[4].
Dezavantajul AWT-ului este c arhitecii lui au fost nevoii s ia n considerare
numai acele clase de obiecte grafice, care exist ntr-o form sau alta pe
toate platformele. Aceasta a fcut ca numrul de clase de obiecte grafice din
pachetul java.awt s fie destul de restrns, renunndu-se la funcionalitile
specifice numai anumitor platforme.
In principiu, crearea unei aplicaii grafice presupune urmtoarele lucruri[4]:
. Design
- Crearea unei suprafee de afiare (cum ar fi o fereastr) pe care vor fi
aezate obiectele grafice (componente) care servesc la comunicarea cu
utilizatorul (butoane, controale pentru editarea textelor, liste, etc);
- Crearea i aezarea componentelor pe suprafaa de afiare la poziiile
corespunztoare;
. Funcionalitate
- Definirea unor aciuni care trebuie s se execute n momentul cnd
utilizatorul interacioneaz cu obiectele grafice ale aplicaiei;
- "Ascultarea" evenimentelor generate de obiecte n momentul interaciunii
cu utilizatorul i executarea aciunilor corespunztoare, aa cum au fost ele
definite.
Pachetul javax.swing
Componentele Swing, spre deosebire de predecesoarele din versiunile Java
anterioare, sunt implementate n ntregime n Java. Aceasta are ca rezultat o

mai bun compatibilitate cu platforme diferite dect n cazul folosirii


componentelor AWT.
Unul din principalele deziderate ale tehnologiei Swing a fost s pun la
dispoziie un set de componente GUI extensibile care s permit dezvoltarea
rapid de aplicaii Java cu interfa grafic competitiv din punct de vedere
comercial. Cel mai important pachet, care conine componentele de baz
este javax.swing.
Orice interfa utilizator Java este compus din urmtoarele elemente:
. Componente - orice poate fi plasat pe o interfa utilizator, cum ar fi
butoane, liste de derulare, meniuri pop-up, casete de validare sau cmpuri
de text.
. Containere - acestea reprezint componente care pot conine alte
componente (de exemplu panouri, casete de dialog sau ferestre
independente)
. Administratori de dispunere - reprezint obiecte care definesc modul n care
sunt aranjate (dispuse) componentele ntr-un container. Administratorul de
dispunere nu este vizibil ntr-o interfa, ns sunt vizibile rezultatele "muncii"
sale. Dispunerea componentelor interfeei este de mai multe feluri:
dispunere secvenial, dispunere tabelar, dispunere marginal sau
dispunere tabelar neproporional.
1). Componente i containere
Componentele Swing sunt derivate dintr-o singur clas de baz, numit
JComponent, care motenete la rndul ei clasa Container din AWT.
Componentele folosite pentru crearea interfeelor grafice Swing pot fi
grupate astfel[4]:
. Componente atomice:
- JLabel, JButton, JCheckBox, JRadioButton, JToggleButton, JScrollBar, JSlider,
JProgressBar, JSeparator
. Componente complexe:
- JTable, JTree, JComboBox, JSpinner, JList, JFileChooser, JColorChooser,
JOptionPane
. Componente pentru editare de text:
- JTextField, JFormattedTextField, JPasswordField, JTextArea, JEditorPane,
JTextPane
. Meniuri:
- JMenuBar, JMenu, JPopupMenu, JMenuItem, JCheckboxMenuItem,
JRadioButtonMenuItem
. Containere intermediare:
- JPanel, JScrollPane, JSplitPane, JTabbedPane, JDesktopPane, JToolBar
. Containere de nivel nalt
- JFrame, JDialog, JWindow, JInternalFrame, JApplet
Containerele reprezint suprafee de afiare pe care pot fi plasate alte
componente, eventual chiar alte containere. Superclasa componentelor de
acest tip este Container, din modelul AWT.
Containerele de nivel nalt

Pentru a fi afiate pe ecran componentele grafice ale unei aplicaii trebuie


plasate pe o suprafa de afiare (container). Fiecare component poate fi
coninut doar ntr-un singur container, adugarea ei pe o suprafa nou de
afiare determinnd eliminarea ei de pe vechiul container pe care fusese
plasat. Deoarece containerele pot fi ncapsulate n alte containere, o
component va face parte la un moment dat dintr-o ierarhie. Rdcina
acestei ierarhii trebuie s fie un aa numit container de nivel nalt, care este
reprezentat de una din clasele JFrame, JDialog sau JApplet.
n general orice aplicaie Java independent bazat pe Swing conine cel
puin un container de nivel nalt reprezentat de fereastra principal a
programului, instan a clasei JFrame.
Containerele intermediare (JPanel, JScrollPane, JTabbedPane, JSplitPane,
JLayeredPane, JDesktopPane, JRootPane.) reprezint suprafee de afiare cu
ajutorul crora pot fi organizate mai eficient componentele aplicaiei, putnd
fi imbricate.
JPanel are aceeai funcionalitate ca i clasa Panel din AWT, fiind folosit
pentru gruparea mai multor componente Swing i plasarea lor mpreun pe o
alt suprafa de afiare. Gestionarul de poziionare implicit este FlowLayout,
acesta putnd fi schimbat ns, chiar n momentul construirii obiectului
JPanel, sau ulterior cu metoda setLayout. Adugarea de componente se
realizeaz ca pentru orice container, folosind metoda add( ).
JScrollPane este o clas foarte important n arhitectura modelului Swing,
deoarece ofer suport pentru derularea pe orizontal i vertical a
componentelor a cror reprezentare complet nu ncape n suprafaa
asociat, nici o component Swing neoferind suport intrinsec pentru aceast
operaie.
Clasa JComponent este superclasa tuturor componentelor Swing, mai puin a
celor care descriu containere de nivel nalt JFrame, JDialog, JApplet. Deoarece
JComponent extinde clasa Container, deci i Component, ea motenete
funcionalitatea general a containerelor i componentelor AWT, furniznd
bineneles i o serie ntreag de noi faciliti[4].
Componente pentru editare de text
Componentele Swing pentru afiarea i editarea textelor sunt grupate ntr-o
ierarhie ce are ca rdcin clasa JTextComponent din pachetul
javax.swing.text. Clasele pot mprite n trei categorii, corespunztoare
tipului textului editat:
1. Text simplu pe o singur linie
- JTextField - Permite editarea unui text simplu, pe o singur linie.
- JPasswordField - Permite editarea de parole. Textul acestora va fi ascuns, n
locul caracterelor introduse fiind afiat un caracter simbolic, cum ar fi '*'.
2. Text simplu pe mai multe linii
- JTextArea - Permite editarea unui text simplu, pe mai multe linii.Orice atribut

legat de stil, cum ar fi culoarea sau fontul, se aplic ntregului text i nu


poate fi specificat doar unei anumite poriuni. Uzual, o component de acest
tip va fi inclus ntr-un container JScrollPane, pentru a permite navigarea pe
vertical i orizontal dac textul introdus nu ncape n suprafaa alocat
obiectului. Acest lucru este valabil pentru toate componentele Swing pentru
care are sens noiunea de navigare pe orizontal sau vertical, nici una
neoferind suport intrinsec pentru aceast operaiune.
3. Text cu stil mbogit pe mai multe linii
- JEditorPane - Permite afiarea i editarea de texte scrise cu stiluri multiple i
care pot include imagini sau chiar diverse alte componente.
- JTextPane - Aceast clas extinde JEditorPane, oferind faciliti suplimentare
pentru lucrul cu stiluri i paragrafe.
Componente atomice
n categoria componentelor atomice sunt incluse componentele Swing cu
funcionalitate simpl, a cror utilizare este facil i n general asemntoare
cu a echivalentelor din AWT:
. Etichete: JLabel
. Butoane simple sau cu dou stri:JButton, JCheckBox, JRadioButton; mai
multe butoane radio pot fi grupate folosind clasa ButtonGroup, pentru a
permite selectarea doar a unuia dintre ele.
. Componente pentru progres i derulare: JSlider, JProgressBar, JScrollBar
. Separatori: JSeparator
Componente complexe
Clasa JList
Clasa JList descrie o list de elemente dispuse pe una sau mai multe coloane,
din care utilizatorul poate selecta unul sau mai multe. Uzual un obiect de
acest tip va fi inclus ntr-un container de tip JScrollPane. Clasa ofer metode
pentru selectarea unor elemente din cadrul programului setSelectedIndex,
setSelectedIndices, etc. i pentru obinerea celor selectate la un moment dat
getSelectedIndex, getSelectedIndices, etc..
Clasa JComboBox
Clasa JComboBox este similar cu JList, cu deosebirea c permite doar
selectarea unui singur articol, acesta fiind i singurul permanent vizibil. Lista
celorlalte elemente este afiat doar la apsarea unui buton marcat cu o
sgeat, ce face parte integrant din component. JComboBox funcioneaz
dup aceleai principii ca i clasa JList.
Clasa JTable
Clasa JTable permite crearea de componente care s afieze o serie de
elemente ntr-un format tabelar, articolele fiind dispuse pe linii i coloane. Un
tabel poate fi folosit doar pentru afiarea formatat a unor date, dar este
posibil i editarea informaiei din celulele sale. De asemenea, liniile
tabelului pot fi marcate ca selectate, tipul seleciei fiind simplu sau compus,
tabelele extinznd astfel funcionalitatea listelor. O serie de clase i interfee
necesare lucrului cu tabele se gsesc n pachetul javax.swing.table, acesta

fiind aadar cel ce trebuie importat.

2). Tratarea evenimentelor


Interfaa grafic servete interaciunii cu utilizatorul. De cele mai multe ori
programul trebuie s fac o anumit prelucrare n momentul n care
utilizatorul a efectuat o aciune i, prin urmare, componentele trebuie s
genereze evenimente n funcie de aciunea pe care au suferit-o (aciune
transmis de la tastatur, mouse, etc.). n limbajului Java, evenimentele sunt
instane ale claselor derivate din AWTEvent[4].
Aadar, un eveniment este produs de o aciune a utilizatorului asupra unui
obiect grafic, deci evenimentele nu trebuie generate de programator. In
schimb, ntr-un program trebuie specificat codul care se execut la apariia
unui eveniment. Tratarea evenimentelor se realizeaz prin intermediul unor
clase de tip listener (asculttor, consumator de evenimente), clase care sunt
definite n pachetul java.awt.event. In Java, orice component poate
"consuma" evenimentele generate de o alt component.
Dac o clas dorete s rspund unui eveniment utilizator, ea trebuie s
implementeze o interfa care s prelucreze evenimentele. Aceste interfee
se numesc interceptoare de evenimente (events listeners). Fiecare
interceptor trateaz un anumit tip de eveniment, iar o clas poate
implementa oricte evenimente are nevoie[9]. Cele mai importante
interceptoare de evenimente sunt:
. ActionListener - trateaz evenimente de aciune, care sunt generate de
aciunea unui utilizator asupra unei componente, cum ar fi execuia unui clic
pe un buton.
. WindowListener - trateaz evenimente de ferestre, care sunt generate de
maximizarea, minimizarea, mutarea sau nchiderea ferestrelor.
. MouseListener - trateaz evenimente de mouse, care sunt generate de
clicuri cu mouse-ul, de ptrunderea indicatorului mouse-ului pe suprafaa
unei componente sau de prsirea acesteia.
. FocusListener - trateaz evenimente de selecionare, care sunt generate,
atunci cnd o component devine selectat sau cnd pierde acest atribut.
. AdjustmentListener - trateaz evenimente de modificare a componentelor.
. ItemListener - trateaz evenimente generate de modificarea strii unei
componente).
. KeyListener - trateaz evenimente care apar cnd utilizatorul apas o
anumit tast.

S-ar putea să vă placă și