Sunteți pe pagina 1din 7

Laborator 7

Introducere în interfețe grafice

7.1. Pachetele AWT si Swing

Aplicațiile realizate până acum au avut interfața în mod text. Astfel, ecranul era privit ca o matrice de
caractere. Pentru simplificarea utilizării aplicațiilor complexe se preferă crearea unei interfețe în
mod grafic. In acest caz ecranul este considerat o matrice de puncte (pixeli) de diverse culori (de
obicei fiecare pixel are asociate trei componente de culoare R-red, G-green, B-blue). O astfel de
interfață poarta denumirea de "GUI" – Graphical User Interface.

O interfață GUI este formată din ferestre (porțiuni dreptungiulare pe ecran). Ferestrele unei aplicații
conțin așa numitele "widgets" (elemente grafice de control) care permit interacțiunea cu utilizatorul.

Interacțiunea cu utilizatorul se realizează prin mouse și tastatura. O interfață grafică se crează de


obicei cu sprijinul sitemului de operare (printr-o componentă numită server grafic).

Limbajul Java pune la dispoziția programatorului două biblioteci pentru realizarea unei interfețe
grafice: java.awt și javax.swing.

Pachetele awt și swing conțin clase pentru gestionarea completă a unei interfețe.

In figură sunt expuse clasele din awt:


In plus față de pachetul standard awt, pachetul swing adaugă noi clase care permit îmbunătățirea
interfeței realizate. In figura următoare sunt prezentate clasele noi introduse de catre swing:

7.2. Ferestre

Oricărei aplicații grafice îi corespunde o fereastră principală (de tip FRAME) și una sau mai multe
ferestre adiționale.

In swing există trei clase pentru gestionarea ferestrelor: Jframe, JWindow și JDialog.

Clasa JFrame permite crearea unei ferestre de aplicație. Fereastra are o bara de titlu, o margine,
butoane de minimizare, maximizare și inchidere (butoane "system").

Clasa JWindow permite crearea unei ferestre fără bara de titlu, meniu, butoane sistem etc.

Clasa JDialog permite crearea de ferestre de dialog. Ferestrele de dialog sunt dependente de
ferestrele părinte de tip Frame. O fereastra de dialog poate fi modală (blocheaza aplicația până la
închiderea dialogului) sau nemodală (nu blochează).
Pentru a crea ferestre de afișare a unor mesaje se poate utiliza direct o funcție statică, fără a mai crea
explicit un obiect tip dialog:

JOptionPane.showMessageDialog(frame, “Mesajul meu.");

Pentru ferestre de dialog standard există clase specializate: JFileChooser și JColorChooser. Acestea
pot fi utilizate pentru a selecta un fișier sau a alege o culoare.

Crearea unei ferestre principale:

public static void main(String args[]) {


   JFrame win = new JFrame(“Titlul ferestrei");
   win.setSize(200, 200);
   win.show();
}

Pentru a accesa conținutul unei ferestre se va folosi funcția getContentPanel():

Container c = win.getContentPanel();

Pentru a obține închiderea automată a aplicației atunci când se apasă butonul Close, se va utiliza
metoda:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Pentru a organiza elementele într-o fereastră se vor utiliza panouri. Swing pune la dispozitie două
tipuri de panouri: JPanel (panou simplu) și JScrollPane (panou cu derulare).

Sarcina 1 : Rulați programul următor  identificând rolul fiecărei clase și a constructorilor
corespunzători:

import javax.swing.*;
import java.awt.*;

class WinAplic {

public static void main(String args[]) {


JFrame win = new JFrame("Aplicatia mea");

win.getContentPane().add( new JLabel("Utilizare swing!"));

win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.pack();
win.show();
}
}
7.3. Elemente grafice de control (WIDGETS)

7.3.1. Butoane

Butoanele sunt elemente de control care, prin apăsare, pot genera o acțiune. Asocierea unei acțiuni
cu un buton se va preda ulterior acestui laborator.

Butoanele derivă din clasa JButton. In costructor primesc textul afișat pe buton. Prin procedura
setMnemonic se pot asocia taste de apelare rapidă (shortcut).

Pentru a adăuga un cuvânt de comandă asociat butonului (cuvant ce va fi testat pentru efectuarea
acțiunii asociate) se foloseste metoda addActionCommand().

JButton buton = new JButton("I'm a Swing button!");


buton.setMnemonic('i');
buton.addActionCommand("butonulSwing");
JPanel panouButon = new JPanel();
panouButon.add(buton);

7.3.2 CheckBox-uri

Butoanele de marcaj sau check box urile sunt elemente de control care rețin o anumită stare. In plus
față de butoanele simple, pentru ele se pot apela metodele setSelected () pentru a stabili marcajul
prin program, respectiv getSelected() pentru a afla starea marcajului.

cb1 = new JCheckBox(“Optiune1");


cb1.setMnemonic(KeyEvent.VK_1);
cb1.setSelected(true);
JPanel checkPanel = new JPanel();
checkPanel.setLayout(new GridLayout(0, 1));
checkPanel.add(cb1);

7.3.3 RadioButton

Butoanele radio sunt elemente de control care rețin o anumita stare, la fel cu cele de marcaj.
Deosebirea principală constă în faptul că toate butoanele radio incluse în acelasi grup logic sunt
mutual exclusive. Pentru gestionarea grupurilor de butoane radio se va folosi clasa ButtonGroup,
respectiv metoda add() care adauga un buton la grup.

Si pentru butoanele radio se pot apela metodele setSelected(boolen marcat) pentru a stabili marcajul
prin program, respectiv getSelected() pentru a afla starea marcajului.

// Creare radio-buttons.
JRadioButton birdButton = new JRadioButton(“Pasare”);
birdButton.setMnemonic(KeyEvent.VK_B);
birdButton.setActionCommand(“Pasare”);
birdButton.setSelected(true);
JRadioButton catButton = new JRadioButton(“Pisica”);
catButton.setMnemonic(KeyEvent.VK_C);
catButton.setActionCommand(“Pisica”);

// Grupare radio-buttons.
ButtonGroup group = new ButtonGroup();
group.add(birdButton);
group.add(catButton);

// Aranjarea pe coloana intr-un Panel
JPanel radioPanel = new JPanel();
radioPanel.setLayout(new GridLayout(0, 1));
radioPanel.add(birdButton);
radioPanel.add(catButton);

Sarcina 2: Rulati programul următor având grijă ca scrierea clasei Widgets să se facă într-un fișier
separat din același package:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Butoane extends JPanel {

public Butoane() {
JButton b1 = new JButton("ButonA");
b1.setMnemonic(KeyEvent.VK_A);
JButton b2 = new JButton("ButonB");
b2.setMnemonic(KeyEvent.VK_B);
this.setLayout(new GridLayout(1,0));
add(b1);
add(b2);
}
}

class CheckBoxuri extends JPanel {

public CheckBoxuri() {
JCheckBox cb1 = new JCheckBox("Optiune1");
cb1.setMnemonic(KeyEvent.VK_1);
cb1.setSelected(true);
JCheckBox cb2 = new JCheckBox("Optiune2");
cb2.setMnemonic(KeyEvent.VK_2);
cb2.setSelected(true);
JCheckBox cb3 = new JCheckBox("Optiune3");
cb3.setMnemonic(KeyEvent.VK_3);
cb3.setSelected(true);
this.setLayout(new GridLayout(0,1));
add(cb1);
add(cb2);
add(cb3);
}
}

class ButoaneRadio extends JPanel {

public ButoaneRadio() {
// Creare radio butoane
JRadioButton butonAlb = new JRadioButton("Alb");
butonAlb.setMnemonic(KeyEvent.VK_L);
butonAlb.setActionCommand("Alb");
butonAlb.setSelected(true);
JRadioButton butonRosu = new JRadioButton("Rosu");
butonRosu.setMnemonic(KeyEvent.VK_R);
butonRosu.setActionCommand("Rosu");
JRadioButton butonVerde = new JRadioButton("Verde");
butonVerde.setMnemonic(KeyEvent.VK_V);
butonVerde.setActionCommand("Verde");
// Gruparea butoanelor
ButtonGroup group = new ButtonGroup();
group.add(butonAlb);
group.add(butonRosu);
group.add(butonVerde);
// Adaugarea butoanelor
this.setLayout(new GridLayout(0,1));
add(butonAlb);
add(butonRosu);
add(butonVerde);
}
}

public class Widgets extends JFrame {

public static void main(String args[]) {


Widgets app = new Widgets();

Butoane panouButoane = new Butoane();


CheckBoxuri panouCheckBoxuri = new CheckBoxuri();
ButoaneRadio panouButoaneRadio = new ButoaneRadio();

JPanel panou = new JPanel();


panou.setLayout(new GridLayout(0,1));
panou.add(panouButoane);
panou.add(panouCheckBoxuri);
panou.add(panouButoaneRadio);
panou.setBorder(
BorderFactory.createEmptyBorder(20, 20, 20, 20));
app.getContentPane().add(panou);
app.pack();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.show();
}
}

7.3.4. ListBox-uri

ListBox-urile afișează liste de opțiuni. Ele se compun dintr-un element care se ocupă de vizualizare
(derivat din clasa JList), respectiv dintr-un element care se ocupă cu gestionarea conținutului (derivat
din ListModel).

Interfața ListModel pune la dispoziție o metodă addElement() care permite adăugarea unei noi
opțiuni în listă.

Constructorul clasei JList primește un obiect de tip ListModel pe care îl va afișa pe ecran. Pentru a
avea la dispozitie bare de derulare asociate listei, aceasta va trebui inclusă într-un element de tip
JScrollPane (un panou derulant).

Adițional listelor simple se pot defini și liste cu derulare (de tip ComboBox). Acestea afisează în mod
obișnuit o singură opțiune din listă iar pentru a accesa restul opținulor lista trebuie derulată de la un
buton special. Listele derulante nu trebuie adăugate într-un JScrollPane
Sarcina 3: Rulați programul următor având grijă să puneti în fișier separat clasa Liste:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class ListBox extends JScrollPane {


public ListBox() {
DefaultListModel listModel = new DefaultListModel();
listModel.addElement("Linie1");
listModel.addElement("Linie2");
listModel.addElement("Linie3");
JList list = new JList(listModel);
list.setVisibleRowCount(3);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setSelectedIndex(0);
setViewportView(list);
}
}

class ComboBox extends JPanel {


public ComboBox() {
String[] culori = { "Alb", "Negru", "Rosu", "Verde", "Albastru" };
JComboBox listaCulori = new JComboBox(culori);
listaCulori.setSelectedIndex(1); // selecteaza elementul 2 (Negru)
listaCulori.setEditable(true);
add(listaCulori);
}
}

public class Liste extends JFrame {

public static void main(String args[]) {


Liste app = new Liste();

ListBox panouLista = new ListBox();


ComboBox panouCombo = new ComboBox();

JPanel panou = new JPanel();


panou.setLayout(new GridLayout(0,1));
panou.add(panouLista);
panou.add(panouCombo);
panou.setBorder(
BorderFactory.createEmptyBorder(20, 20, 20, 20));
app.getContentPane().add(panou);
app.pack();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.show();
}
}

Sarcina 4 : Realizați o interfață care să conțină toate elementele grafice prezentate mai sus