Interfața utilizator grafică a unei aplicații

Orice interfață utilizator grafică este un obiect grafic structurat, în alcătuirea căruia intră componente grafice. În sistemele AWT și JFC/Swing, toate componentele grafice fac parte din clase care constituie un arbore, a cărui rădăcină este clasa Component. Deosebim componente atomice și containere. Containerele sunt componente grafice care conțin alte componente. Containerele aparțin unor clase care formează o ierarhie, a cărei rădăcină este clasa Container. Clasa Container este derivată din clasa Component. Aceasta înseamnă ca orice container este o el însuși componentă, deci un container poate să conțină alte containere.

Clasa Component

Având în vedere că întreaga ierarhie de clase de obiecte de interfață utilizator grafică folosite în Java (atât cele din AWT, cât și din JFC/Swing) are ca rădăcină clasa Component, este util să începem studiul cu această clasă.

Componenta este un obiect grafic care este afișabil pe ecran și poate interacționa cu utilizatorul.

Clasa Component este o clasă abstractă, derivată direct din clasa Object.
 
Dintre numeroasele metode ale acestei clase, prezentăm aici numai câteva mai frecvent folosite:

    public boolean isVisible() - testează dacă această componentă este vizibilă, atunci când este vizibil și containerul în care se găsește;
    public void setVisible(boolean visible) - face componenta sa fie vizibilă sau nu, după cum argumentul este true sau false;
    public boolean isShowing() - determină dacă componenta este efectiv afișată pe ecran;
    public Point getLocation() - întoarce locația componentei (poziția colțului din stânga sus în containerul-părinte) sub forma unei instanțe a clasei Point;
    public void setLocation(Point location) - setează noua poziție a componentei în cadrul containerului părinte;
    public Dimension getSize() - întoarce dimensiunea componentei;
    public void setSize(int latime, int inaltime) - setează noile dimensiuni ale componentei.

În aceste metode se utilizează și clasele auxiliare Point și Dimension din pachetul java.awt. Instanțele clasei Point conțin coordonatele unui punct. Se consideră că originea sistemului de coordonate se află în colțul din stânga sus, axa Ox este orientată către dreapta, iar axa Oy este orientata în jos. Instanțele clasei Dimension conțin dimensiunile componentei: lățimea și înălțimea.

O prezentare mai amplă a metodelor acestei clase este dată în index. Descrierea completă este dată în documentația Java API.

Un exemplu introductiv de interfață utilizator grafică

Întrucât interfața grafică conține componente, ea este un container. Vom studia ulterior diferite clase de containere dar, deocamdată, ne vom opri asupra clasei JFrame, care se folosește în aplicațiile Java.

În sistemul JFC/Swing, interfața utilizator grafică a unei aplicații este o instanță a clasei JFrame din pachetul javax.swing, sau este o subclasă a acesteia. În mod obișnuit, instanțele clasei JFrame sunt ferestre care au la partea superioara o bară de titlu. În partea stângă a barei de titlu există un buton, la apăsarea căruia se desfașoară un menu cu urmatoarele opțiuni: Restore, Move,Size, Minimize, Maximize, Close. Cînd meniul este desfășurat, acste opțiuni pot fi selectate cu mouse-ul sau acționând  tasta corespunzătoare literei subliniate. La partea dreaptă a barei de titlu exista trei butoane, care au acelasi efect ca opțiunile Minimize, Maximize și Close din meniul menționat.

Selecționarea opțiunilor sau acționarea butoanelor din bara de titlu produce asupra ferestrei efectul corespunzător. Fereastra poate fi deplasată pe ecran dacă punem cursorul mouse-lui pe bara de titlu și o tragem, ținând butonul de mouse apăsat. Dimensiunile ferestrei pot fi modificate trăgând cu mouse-ul oricare din laturile sau din colțurile ei.

Modul cel mai simplu de a realiza o aplicație cu interfață grafică este să folosim direct o instanță a clasei javax.swing.JFrame, care extinde clasa Frame din AWT.  Clasa are o structură destul de complicată și este descrisă complet în documentația Java.API. Pentru a nu intra de la început în detalii, vom da, deocamdată, numai cateva informații strict necesare pentru folosirea acestei clase, urmând să revenim ulterior cu indicații suplimentare.

Principalul constructor este:
    JFrame(String titlu)
unde titlu este titlul ferestrei.

Clasa JFrame are numeroase metode, atât proprii, cât și moștenite de la superclasele ei. În afară de metodele moștenite de la clasa Component, deocamdată,  vom mai menționa aici numai două, care sunt  moștenite de la clasa Frame:

    public String getTitle() - întoarce titlul ferestrei;
    public void setTitle(String titlu) - pune ferestrei un titlu (în locul celui existent).

La crearea ei, instanța clasei JFrame nu este vizibilă. Pentru a o face vizibilă se folosește metoda public void setVisible(boolean visible) a clasei Component.

Constructorii și metodele clasei Frame se gasesc în index. Descrierea completă se găsește în documentația Java API.
 
Exemplu: introducerea unui JFrame într-o aplicație

În fișierul TestJFrame1.java este dat un exemplu de aplicație care are o interfață utilizator din clasa JFrame. Iată conținutul acestui fișier:
 
import java.awt.*;
import javax.swing.*;

class TestJFrame1 {
  static JFrame iug;

  public static void main(String args[]) throws Exception {
    iug=new JFrame("Exemplu de JFrame");
    iug.setSize(300,100);
    iug.setLocation(new Point(100,50));
    iug.setVisible(true);
    System.out.println("Titlul ferestrei este: "+iug.getTitle());
    System.out.println("Coltul din stanga sus este in punctul: "+
      iug.getLocation());
    System.out.println("Dimensiunile ferestrei: "+iug.getSize());
  }
}

În prima linie este importat pachetul javax.swing, care conține principalele clase ale JFC/Swing, inclusiv clasa JFrame.

În clasa TestJFrame1 (care este aplicația noastră), s-a declarat câmpul static iug, care este o referință la JFrame. În prima instrucțiune din metoda main se creeaza o instanță a clasei JFrame și se dă câmpului iug ca valoare referința la instanța nou creată. Se folosesc apoi metodele setSize(), setLocation() și setVisible() din clasa Component, pentru a stabili dimensiunile ferestrei și pozitia ei pe ecran și a o face vizibilă. Se afișeaza apoi în fereastra terminalului de la care s-a lansat aplicația (la ieșirea standard a sistemului) titlul, coordonatele și dimensiunile ferestrei, folosind metodele adecvate din clasele JFrame și Component.

La lansarea în execuție a acestei aplicații, în colțul din stânga sus al ecranului apare o fereastră de dimensiuni 300x100 pixeli, cu titlul "Exemplu de JFrame", iar la ieșirea standard apar toate mesajele afișate prin instrucțiunile System.out.println(...) din metoda main. Putem acum să acționăm asupra ferestrei cu mouse-ul, având grijă să nu dam comanda Close (nici din menu, nici acționând butonul din dreapta sus marcat cu X): putem să  deplasăm fereastra tragând cu mouse-ul de bara de titlu, să o iconificăm (minimizăm), deiconificăm, maximizam, restaurăm. Putem, de asemenea, să modificăm dimensiunile ferestrei, trăgând cu mouse-ul de marginile acesteia. 

La sfârșit, putem da comanda Close (din meniul ferestrei sau apasând butonul marcat cu X) și fereastra se închide. Constatăm însă că închiderea ferestrei nu are drept consecința și încheierea executării aplicației: în fereastra terminalului din care am lansat aplicația nu a apărut promptul sistemului de operare. Pentru a încheia executarea aplicației, trebuie să dăm de la terminal comanda <Control>-C.

Pentru a avea o interfață grafică functională, este necesar:
  - să adaugăm la interfață componente grafice;
  - să asigurăm interacțiunea utilizatorului cu aceste componente și cu însăși fereastra aplicației.
Ne vom ocupa de aceste aspecte în secțiunile următoare.



© Copyright 2000 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați