This is an old revision of the document!


Breviar

Laborator 10 - Interfete

  • Responsabil: Mihai Nan
  • Profesor titular: Carmen Odubășteanu

Introducere

In cazul programelor pe care le-am facut pana acum, toate mesajele si raspunsurile apareau ca linii de text sugestive, ecranul fiind folosit in mod text. Un astfel de stil de comunicare nu este atractiv pentru utilizatori, motiv pentru care se prefera dialogul prin interfete grafice sau GUI (Graphical User Interface), ecranul fiind folosit in mod grafic.

In trecerea de la o versiune la alta, bibliotecile de clase care ofera servicii grafice au suferit, probabil, cele mai mari schimbari. Acest lucru se datoreaza, pe de o parte, dificultatii legate de implementarea notiunii de portabilitate, iar pe de alta parte nevoii de a integra mecanismele GUI cu tehnologii aparute si dezvoltate ulterior.

In momentul actual, exista doua modalitati de a crea o aplicatie cu interfata grafica, iar acestea sunt:

  • AWT (Abstract Windowing Toolkit) - este API-ul initial pus la dispozitie incepand cu primele versiuni de Java;
  • Swing - este parte dintr-un proiect mai amplu numit JFC (Java Foundation Classes) creat in urma colaborarii dintre Sun, Netscape si IBM, care se bazeaza pe modelul AWT, extinzand functionalitatea acestuia si adaugand sau inlocuind unele componente pentru dezvoltarea aplicatiilor GUI.

Este preferabil ca aplicatiile Java sa fie create folosind tehnologia Swing, deoarece aceasta pune la dispozitie o paleta mult mai larga de facilitati, insa nu se va renunta complet la AWT, deoarece aici exista clase esentiale, reutilizate in Swing.

Pachetul Swing

Componentele Swing, spre deosebire de predecesoarele din versiunile Java anterioare, sunt implementate in intregime in Java. Aceasta are ca rezultat o mai buna compatibilitate cu platforme diferite decat in cazul folosirii componentelor AWT. Unul din principalele deziderate ale tehnologiei Swing a fost sa puna la dispozitie un set de componente GUI extensibile care sa permita dezvoltarea rapida de aplicatii Java cu interfata grafica competitiva, din punct de vedere comercial. Cel mai important pachet, care contine componentele de baza este javax.swing.

Orice interfata utilizator Java este compusa din urmatoarele elemente:

  • Componente – orice poate fi plasat pe o interfata utilizator, cum ar fi butoane, liste de derulare, meniuri pop-up, casete de validare sau campuri de text;
  • Containere – acestea reprezinta componente care pot conţine alte com- ponente (de exemplu panouri, casete de dialog sau ferestre independente);
  • Administratori de dispunere – reprezinta obiecte care definesc modul in care sunt aranjate (dispuse) componentele intr-un container. Admin- istratorul de dispunere nu este vizibil intr-o interfata, insa sunt vizibile rezultatele ”muncii” sale. Dispunerea componentelor interfetei este de mai multe feluri: dispunere secventiala, dispunere tabelara, dispunere marginala sau dispunere tabelara neproportionala.

Crearea ferestrelor

Clasa JFrame este cea pe care o vom folosi pentru a crea ferestre. Ca orice alta clasa care reprezinta componente Swing ea se afla in pachetul javax.swing. Pentru ca este un container, vom folosi, de cele mai multe ori, aceasta clasa prin mostenire nu prin instantiere. Altfel spus, vom crea clase care sa reprezinta ferestre si pentru ca acestea sa devina ferestre de tip JFrame ele vor mosteni aceasta clasa.

public class Fereastra extends JFrame {
    private JButton button;
 
    public Fereastra (String text){
        super(text);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setMinimumSize(new Dimension (3 0 0, 2 0 0));
        getContentPane().setBackground (Color.blue);
        setLayout(new SpringLayout());
        button = new JButton("Apasa");
        add(button);
        show();
        pack();
   }
 
    public static void main(String args[]) {
        Fereastra f = new Fereastra("Laborator POO" ) ;
    }
}

Metoda add(Component c) este folosita pentru a adauga pe fereastra o componenta exact ca in cazul Appleturilor. Metoda add() este mostenita din clasa Container.

Crearea butoanelor

Un buton poate fi creat folosind clasa JButton. De obicei, butonul este contruit folosind unul dintre constructorii:

  • public JButton(); → un buton fara text
  • public JButton(String text) → un buton cu text dat ca parametru
  • public JButton(String text, Icon ico) → buton cu text si imagine

Textul de pe buton poate fi modificat folosind metoda setText(String text) sau poate fi preluat folosind metoda getText(). Metodele setLabel() si getLabel() sunt considerate obsolete si nu se mai folosesc in prezent.

class Button extends JFrame implements ActionListener{
    private JButton button;
 
    public Button(String text){
        super(text);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setMinimumSize(new Dimension(3 0 0, 2 0 0));
        getContentPane().setBackground(Color.blue);
        setLayout(new SpringLayout());
        button = new JButton("Apasa");
        button.addActionListener(this);
        add(button);
        show();
        pack();
   }
 
    public static void main (String args[]){
        Button b = new Button ("LaboratorPOO");
    }
 
   @Override
   public void actionPerformed(ActionEvent e){
       JButton button = (JButton)e.getSource();
       if (button.getText().equals("Apasa")){
       System.out.println("Butonul a fost apasat ! " ) ;
       }
   }
}

Din moment ce butonul reprezinta o componenta, poate fi adaugat pe un container folosind metoda add(Component c) a containerului. Butonul JButton este sensibil la evenimente de tip ActionEvent, asadar, modalitatea de atasare a ascultatorilor si de creare evenimente este similara butoanelor Button din pachetul java.awt.

Crearea componentelor text

c l a s s Text e x t e n d s JFrame implements A c ti o n Li s t e n e r {
2 p r i v a t e JButton button ;
3 p r i v a t e JTe x tField u s e r ;
4 p r i v a t e JP a s sw o rdField p a s s ;
5
6 p u bli c Text ( S t ri n g t e x t ) {
7 supe r ( t e x t ) ;
8 s e t D e f a ul t Cl o s eO p e r a ti o n ( JFrame .EXIT_ON_CLOSE) ;
9 setMinimumSize (new Dimension ( 3 0 0 , 2 0 0 ) ) ;
10 getContentPane ( ) . setBackground ( C ol o r . bl u e ) ;
11 se tL a y ou t (new FlowLayout ( ) ) ;
12 button = new JButton ( " Apasa " ) ;
13 button . a d dA c ti o nLi s t e n e r ( t h i s ) ;
14 add ( button ) ;
15 u s e r = new JTe x tField ( 1 5 ) ;
16 add ( u s e r ) ;
17 p a s s = new JP a s sw o rdField ( 1 5 ) ;
18 add ( p a s s ) ;
19 show ( ) ;
20 pack ( ) ;
21 }
22
23 p u bli c s t a t i c v oid main ( S t ri n g a r g s [ ] ) {
24 Text b = new Text ( " L ab o r a t o r POO" ) ;
25 }
26
27 @Override
28 p u bli c v oid a c ti o nP e r f o rm e d ( ActionEvent e ) {
29 JButton button = ( JButton ) e . g e t S o u r c e ( ) ;
30 i f ( button . ge tTex t ( ) . e q u al s ( " Apasa " ) ) {
31 System . out . p r i n t l n ( u s e r . ge tTex t ( )+p a s s . ge tTex t ( ) ) ;
32 }
33 }
34 }

Vom folosi trei tipuri de componete text: JTextField, JTextArea si JPasswordField. Componenta JTextFiled este un camp de text cu un singur rand pe care pot incapea mai multe caractere. In general, aceasta componenta este folosita pentru a introduce un text de dimensiuni mici. Componenta JTextArea este un camp de text care permite introducerea unui text pe mai multe randuri, deci, aceasta componenta este folosita pentru texte de dimensiuni mai mari. Componenta /JPasswordField este similara componentei JTextField, doar ca, aceasta ascunde caracterele introduse de utilizator ca in cazul unui camp pentru introducerea parolei obisnuit. Metoda folosita pentru preluarea textului dintr-o componenta text este: getText() care returneaza o instanta de String. Pentru a modifica textul dintrun camp de text, se foloseste metoda setText(String text). Componenta JTextArea are in comportament si metoda append(String text)** care permite adaugarea unui text la componenta.

poo/breviare/breviar-10.1543329406.txt.gz · Last modified: 2018/11/27 16:36 by matei.teodorescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0