Sunteți pe pagina 1din 24

Curs 10 POO

 Rezolvarea temelor din laboratorul 10


 Interfete grafice utilizator
 Un exemplu de fereastra cu 2 butoane configurata
in clasa de test (metoda main)
 Un exemplu de fereastra declarata ca o clasa distincta
 Tratarea evenimentelor - interfata ActionListener
implementata in clasa ce defineste fereastra.
 O aplicatie pt. crearea unei colectii de persoane utilizand
o interfata grafica

2019
Rezolvarea temelor din laboratorul 10 – Tema 1

 Utilizand clasa Cont din cursul 9, realizati o aplicatie care instantiaza doua obiecte de tip
Cont cu datele preluate de la tastatura in fereastra de dialog si le afiseaza in fereastra de
executie.
package c10;
public class Cont {
public int nr;
public String titular;
public double suma;

public Cont(int n, String t, double s) {


nr=n; titular=t; suma=s;
}

@Override
public String toString(){
return String.format("Cont nr: %d titular: %s suma: %.2f",nr, titular, suma);
}
}
2019
Rezolvarea temelor din laboratorul 10 – Tema 1
(continuare)

 Utilizand clasa Cont din cursul 9, realizati o aplicatie care instantiaza doua obiecte de tip
Cont cu datele preluate de la tastatura in fereastra de dialog si le afiseaza in fereastra de
executie.

package c10; //Conversii date


import javax.swing.*; nr=Integer.parseInt(sNr);
public class C10 { suma=Double.parseDouble(sSuma);
public static void main(String[] args) {
int nr; //Creare primul cont
String t,sNr,sSuma; c1= new Cont(nr, t, suma);
double suma;
Cont c1,c2;

//Introducere date pt. primul cont


sNr=JOptionPane.showInputDialog("Introduceti numar cont");
t=JOptionPane.showInputDialog("Introduceti titular");
sSuma=JOptionPane.showInputDialog("Introduceti suma");

2019
Rezolvarea temelor din laboratorul 10 – Tema 1
(continuare)

//Introducere date pt. al 2-lea cont


sNr=JOptionPane.showInputDialog("Introduceti numar cont");
t=JOptionPane.showInputDialog("Introduceti titular");
sSuma=JOptionPane.showInputDialog("Introduceti suma");

//Conversii date
nr=Integer.parseInt(sNr);
suma=Double.parseDouble(sSuma);

//Creare al 2-lea cont


c2= new Cont(nr, t, suma);

System.out.println(c1);
System.out.println(c2);
}
}

2019
Rezolvarea temelor din laboratorul 10 – Tema 2

 Realizati o aplicatie care construieste o colectie de 2 conturi. Datele despre conturi se preiau
de la tastatura cu fereastra de dialog. Se va afisa colectia in fereastra de executie.
package c10; //Afisare colectie
import javax.swing.*; for (Cont c: colectie)
public class C10 { System.out.println(c);
public static void main(String[] args) { }
int nr; }
String t,sNr,sSuma;
double suma;
Cont[] colectie = new Cont[2];

for (int i=0; i< 2; i++) {


//Introducere date
sNr=JOptionPane.showInputDialog("Introduceti numar cont");
t=JOptionPane.showInputDialog("Introduceti titular");
sSuma=JOptionPane.showInputDialog("Introduceti suma");

//Conversii date
nr=Integer.parseInt(sNr);
suma=Double.parseDouble(sSuma);

//Adaugare cont in colectie


colectie[i] = new Cont(nr, t, suma);
}
2019
Rezolvarea temelor din laboratorul 10 – Tema 3
(varianta 1)

 Realizati o aplicatie care construieste o colectie de conturi (maxim 50) . Datele despre conturi
se preiau de la tastatura cu fereastra de dialog. Terminarea introducerii conturilor are loc
atunci cand se introduce sirul vid pt. numar cont. Se va afisa colectia in fereastra de executie.
package c10; while (!gata) {
import javax.swing.*; //Introducere date
public class C10 { sNr=JOptionPane.showInputDialog("Introduceti numar cont");
public static void main(String[] args) { if (sNr.equals("")) gata=true;
int nr; else {
String t, sNr, sSuma; t=JOptionPane.showInputDialog("Introduceti titular");
double suma; sSuma=JOptionPane.showInputDialog("Introduceti suma");
Cont[] colectie = new Cont[50]; //Conversii date
int n=0; //Contor obiecte nr=Integer.parseInt(sNr);
boolean gata=false; suma=Double.parseDouble(sSuma);
//Adaugare cont in colectie
colectie[n++] = new Cont(nr, t, suma);
}
}
//Afisare colectie
for (int i=0; i< n ; i++)
System.out.println(colectie[i]);
}
}

2019
Rezolvarea temelor din laboratorul 10 – Tema 3
(varianta 2)

package c10; //Afisare colectie


import javax.swing.*; for (int i=0; i< n ; i++)
public class C10 { System.out.println(colectie[i]);
public static void main(String[] args) { }
int nr; }
String t,sNr,sSuma;
double suma;
Cont[] colectie = new Cont[50];
int n=0; //Contor obiecte

while (true) {
//Introducere date
sNr=JOptionPane.showInputDialog("Introduceti numar cont");
if (sNr.equals("")) break;
t=JOptionPane.showInputDialog("Introduceti titular");
sSuma=JOptionPane.showInputDialog("Introduceti suma");
//Conversii date
nr=Integer.parseInt(sNr);
suma=Double.parseDouble(sSuma);
//Adaugare cont in colectie
colectie[n++] = new Cont(nr, t, suma);
}

2019
Rezolvarea temelor din laboratorul 10 – Tema 4

 Realizati o aplicatie care citeste dintr-un fisier text o colectie de conturi. Se afiseaza
colectia.Se introduce in colectie un nou cont preluat cu fereastra de dialog. Se afiseaza noua
colectie. Se salveaza colectia in acelasi fisier text. Se verifica fisierul text dupa salvare.

package c10;
public class Cont {
public int nr;
public String titular;
public double suma;

public Cont(int n, String t, double s) {


nr=n; titular=t; suma=s;
}

@Override
public String toString(){
return String.format("%d %s %.2f",nr, titular, suma);
}
}

2019
Rezolvarea temelor din laboratorul 10 – Tema 4
(continuare)
package c10;
import javax.swing.*;
import java.io.File;
import java.util.Scanner;
import java.util.Formatter;
public class C10 {
private static Cont[] colectie = new Cont[50];
private static int n;

private static void incarcaFisier(){


Scanner fisier=null;
String p;
String[] t;
try { fisier = new Scanner( new File("Conturi.txt")); }
catch ( Exception e) { System.err.println("Eroare deschidere fisier"); System.exit(1); }

while(fisier.hasNext()){
p= fisier.nextLine();
t = p.split(" ");
colectie[n++] = new Cont(Integer.parseInt(t[0]),t[1] + " " + t[2], Double.parseDouble(t[3]));
}

fisier.close();
}

2019
Rezolvarea temelor din laboratorul 10 – Tema 4
(continuare)

private static void salveazaFisier(){


Formatter fisier;
try { fisier = new Formatter ("Conturi.txt"); // deschide fisier
for (int i=0; i<n; i++){
fisier.format( "%s\r\n", colectie[i]);
}
fisier.close();
}
catch ( Exception e) {
System.err.println("Eroare la creare fisier");
System.exit(1);
}
}

private static void afiseazaColectie(){


for (int i=0; i<n; i++)
System.out.println(colectie[i]);
}

2019
Rezolvarea temelor din laboratorul 10 – Tema 4
(continuare)
private static Cont preluareCont(){
int nr;
String t,sNr,sSuma;
double suma;

//Introducere date
sNr=JOptionPane.showInputDialog("Introduceti numar cont");
t=JOptionPane.showInputDialog("Introduceti titular");
sSuma=JOptionPane.showInputDialog("Introduceti suma");

//Conversii date
nr=Integer.parseInt(sNr);
suma=Double.parseDouble(sSuma);

return new Cont(nr, t, suma);


}
public static void main(String[] args) {
incarcaFisier();
System.out.println("Citire fisier");
afiseazaColectie();
colectie[n++] = preluareCont();
salveazaFisier();
}
}

2019
Interfete grafice utilizator (GUI)

 O interfata utilizator grafica (graphical user interface - GUI) ofera o tehnica user-
friendly pentru a interactiona cu o aplicatie. GUI –urile sunt alcatuite din componente
GUI.

 AWT (Abstract Window Toolkit) este prima GUI introdusa de java. AWT este un pachet ce
contine clase pentru a crea si manageria interfetele grafice.

 O componenta grafica este un obiect al clasei java.awt.Component, ce are o


reprezentare grafica pe ecran si care poate sa interactioneze cu utilizatorul.
Un exemplu de fereastra cu 2 butoane
configurata in clasa de test (metoda main)

import java.awt.*;
public class C10_1 {
public static void main(String[] args) {

Frame f = new Frame("Window 01"); // Creaza obiectul frame

f.setLayout(new FlowLayout()); // Stabileste managerul de layout

Button b1 = new Button("Button 1"); // Creaza buton


Button b2 = new Button("Button 2");

f.add(b1); // Adauga componenta in fereastra


f.add(b2);

f.pack(); // Dimensioneaza fereastra si plaseaza subcomponentele


f.setVisible(true); //Afiseaza ferestra
}
}
Un exemplu de fereastra cu 2 butoane configurata in
clasa de test (metoda main) (continuare)

Observatii:

 Pentru a opri executia programului trebuie sa selectam optiunea Stop build/Run din
optiunea Run.
 Fereastra afisata este un obiect de tip Frame. Constructorul are un argument ce
specifica titlul ferestrei.
 Obiectele de tip Frame au atasat un manager de layout (layout manager) ce
manageriaza plasamentul componentelor in cadrul ferestrei, precum si modul in care se
face plasamentul si redimensionarea lor, atunci cand se redimensioneaza fereastra.
 Managerul FlowLayout, dat ca parametru al metodei setLayout, pune obiectele in
fereastra unul cate unul de la stanga la dreapta , in ordinea in care ele sunt atasate
ferestrei.
 Sunt create 2 obiecte de tip Button avand ca argument al constructorului, textul scris pe
fiecare buton.
 Atasarea butoanelor la fereastra se face prin metoda add.
 Urmeaza "packaging " pt. fereastra ( metoda pack) si afisarea (metoda show sau
setVisible) .
Un exemplu de fereastra declarata ca o clasa
distincta

 Programul anterior poate fi rescris mai convenabil astfel:


import java.awt.*;
class MyWindow extends Frame{

private Button b1;


private Button b2;

public MyWindow(String title){


super(title);
setLayout(new FlowLayout());
b1 = new Button("Button 1");
b2 = new Button("Button 2");
add(b1);
add(b2);
pack();
}
}
Un exemplu de fereastra declarata ca o clasa
distincta (continuare)

 Clasa de test

public class C10_2 {


public static void main(String[] args) {
Frame f = new MyWindow("Window 02");
f.setVisible(true);
}
}

 In acest exemplu, fereastra grafica este definita printr-o clasa distincta.

 Componentele grafice sunt definite ca variabile instanta private, iar constructorul clasei
stabileste managerul de layout, instantiaza obiectele grafice si le adauga in fereastra.

 Programul de test declara o variabila de tip fereastra, o instantiaza si o afiseaza.

 Clasa MyWindow poate fi declarata public si specificata printr-un fisier .java distinct
Tratarea evenimentelor - interfata ActionListener
implementata in clasa ce defineste fereastra.

 Vom considera evenimentul de tip action, click pe un control de tip button.

import java.awt .*;


import java.awt.event.*;
class MyWindow extends Frame implements ActionListener {
Button ok = new Button("OK");
Button exit = new Button(" Exit ");
int n=0;
public MyWindow( String title ) {
super( title );
setLayout(new FlowLayout());
setSize(200 , 100) ;
add(ok);
add( exit );
ok.addActionListener( this ); // listener-ul este instanta curenta
exit.addActionListener( this );
}
Tratarea evenimentelor - interfata ActionListener
implementata in clasa ce defineste fereastra
(continuare)

public void actionPerformed( ActionEvent e) { // metoda ActionListener din interfata


if (e.getSource() == exit )
System.exit(0);
if (e.getSource() == ok) {
n ++;
this.setTitle("Ati apasat butonul OK de " + n + " ori");
}
}
}
public class C10_3 {
public static void main(String[] args) {
MyWindow f = new MyWindow(" Test Event ");
f.setVisible(true);
}
}
O aplicatie pt. crearea unei colectii de
persoane utilizand o interfata grafica

 Vom crea o interfata grafica pentru preluarea datelor de tip Persoana si adaugarea lor
intr-o colectie de obiecte. Interfata utilizator va contine doua componente de tip
textField pentru introducerea namelui si salariului si doua buoane (Salveaza si Exit).
Salveaza va inregistra noul obiect in colectie. Exit va afisa in fereastra de executie
colectie de obiecte si apoi va termina aplicatia. Dupa salvarea fiecarui obiect,
componentele textField se vor goli.
 Solutie: definim mai intai clasa publica Persoana.
package c10;
public class Persoana {
private String nume;
private int salariu;

public Persoana(String n, int s){


nume = n;
salariu = s;
}

@Override
public String toString(){
return String.format("%s salariu %d", nume,salariu);
}
}
O aplicatie pt. crearea unei colectii de
persoane utilizand o interfata grafica
(continuation)

 Clasa Fereastra defineste structura si logica ferestrei grafice:


package c10;
import java.awt .*;
import java.awt.event.*;
public class Fereastra extends Frame implements ActionListener {
private Persoana[] vp = new Persoana[50];
private int n=0;

private Label lNume = new Label("Nume");


private TextField txtNume = new TextField(20);

private Label lSalariu = new Label("Salariu");


private TextField txtSalariu = new TextField(20);

private Button salveaza = new Button("Salveaza");


private Button exit = new Button(" Exit ");
private Label lMesaj = new Label(" ");
O aplicatie pt. crearea unei colectii de
persoane utilizand o interfata grafica
(continuation)

public Fereastra( String title ) {


super( title );

setLayout(new FlowLayout());

add(lNume);
add(txtNume);
add(lSalariu);
add(txtSalariu);
add(salveaza);
add(exit);
add(lMesaj);

salveaza.addActionListener( this ); // the listener is the current instance


exit.addActionListener( this );
lMesaj.setForeground(Color.RED);
}
O aplicatie pt. crearea unei colectii de
persoane utilizand o interfata grafica
(continuation)

public void actionPerformed( ActionEvent e) {


Persoana p;
int s;
if (e.getSource() == exit ){
for (int i=0; i<n;i++) System.out.println(vp[i]);
System.exit(0);
}
if (e.getSource() == salveaza) {
if (txtNume.getText().equals("")){lMesaj.setText("Completeaza Nume");return;}
if (txtSalariu.getText().equals("")){lMesaj.setText("Completeaza Salariu");return;}
try {s=Integer.parseInt(txtSalariu.getText());}
catch(NumberFormatException ex){lMesaj.setText("Salariu eronat");return;}
lMesaj.setText("");
p= new Persoana(txtNume.getText(),s); vp[n++]=p;
this.setTitle(n + " persoane"); txtNume.setText(null); txtSalariu.setText(null);
}
}
}
O aplicatie pt. crearea unei colectii de
persoane utilizand o interfata grafica
(continuation)

Clasa de test:

package c10;
public class C10 {
public static void main(String[] args) {
Fereastra f = new Fereastra("Curs 10");
f.pack();
f.setBounds(300,200,270,150);
f.setVisible(true);
}
}

run:
Popescu Dan salariu 3000
Ionescu Elena salariu 2800
O aplicatie pt. crearea unei colectii de
persoane utilizand o interfata grafica
(continuation)
 Validari efectuate de program:
- Numele si salariul trebuiesc completate;
- Salariul trebuie sa fie numeric;

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