+ All Categories
Home > Documents > java-curs-9

java-curs-9

Date post: 08-Nov-2015
Category:
Upload: balan-violeta
View: 216 times
Download: 2 times
Share this document with a friend
31
1 Structuri de Date în Java (IX) javax.swing java.awt JComponent Evenimente Containere. MVC Painting. Layout managers Z-ordering Content pane Events şi Listeners Adapter
Transcript
  • 1Structuri de Date n Java (IX)

    javax.swing java.awt JComponent Evenimente Containere. MVC Painting. Layout managers Z-ordering Content pane Events i Listeners Adapter

  • 2Java Swing

    Este un User Interface (UI) toolkit Furnizeaz clase ce reprezint elemente de interfa precum windows, buttons, combo boxes, trees, menus etc. Pachetul folosit este javax.swing Parte din Java Foundation Classes care conine:

    Abstract Window Toolkit (AWT), UI original Swing, Java UI toolkit nativ Accesibility 2D API (drawing), Drag and Drop

  • 3Pachetul javax.swing

    Componente de baz: JApplet JDialog JFrame JWindow

    Derivate din JComponent: JLabel, JComboBox, JList, JMenuBar JPanel, JPopupMenu, JScrollBar, JPane JTable, JTree, JProgressBar, JSlider, JToolTip . . .

  • 4Abstract Window Toolkit (AWT) Predecesorul lui Swing Aceeai funcionalitate pe toate platformele Folosete elementele de interfa are sistemului pe care ruleaz Implementarea interfeei se bazeaz pe toolkit-uri care fac legtura cu elementele SO underneath Lipsesc elementele UI care nu sunt comune tuturor platformelor (ex. trees, grids)

    n Swing, componentele sunt implementate n Java Avantajul c toate controalele Swing arat la fel, indiferent de SO-ul de dedesubt

  • 5Crearea UI n Swing

    Toate elementele grafice ale UI (buttons, text boxes ..) sunt prefabricate Asamblarea controalelor UI se face prin asamblarea lor n containere ce conin colecii de controale, aranjate n layout-uri complexe Layout manager-ul face aranjarea lor n funcie de dimensiuni, vecinti, n mod automat Tot ceea ce trebuie fcut este indicarea dimensiunilor i ordinii de plasare a componentelor

  • 6Componente Orice element de interfa este un JComponent

    Ierarhia de derivare: Object (java.lang)

    Component (java.awt) Container (java.awt)

    JComponent (javax.swing) . . .

    AWT i Swing implementeaz ambele elemente de UI Swing - avantaje (controale complexe inexistente n AWT, compatibilitate, paradigma MVC)

  • 7nfiare i comportament

    nfiare Poziie i mrime Vizibilitate Font i culoare

    Comportament Reacia la comenzile utilizatorului

    Aciunea utilizatorului expediere obiect eveniment ctre obiectele nregistrate ca listeners

  • 8Evenimente

    Obiectul UI trimite un ActionEvent Destinatarul se nregistreaz ca listener prin implementarea interfeei ActionListener Ca efect, la activare se apeleaz metoda actionPerformed ()

    Categorii: MouseEvent KeyEvent ActionEvent

  • 9Containere

    Componentele Swing sunt de asemenea containere Componenta informeaz containerul asupra modificrilor de aspect Containerul poate chema de exemplu layout manager-ul pentru rearanjare Containerele permit aranjarea componentelor JComponent fr a cunoate detalii despre ele Flexibilitate sporit n proiectarea UI

  • 10

    Peers (perechi) AWT realizeaz funcionarea controalelor UI prin implementarea lor cu ajutorul controalelor native Interaciunea ntre AWT i controalele native se face prin peers Fiecare Component AWT are propria peer Look-uri diferite

    Swing este lightweight (peer-less) Controalele UI sunt implementate nativ n Java Numai controlul cel mai de jos fereastra interacioneaz cu SO Customizarea look-ului (temei)

  • 11

    Paradigma Model-View-Controller (MVC)

    Principiu de proiectare ce separ Structura / datele, (model) Prezentarea / desenarea (view) i Comportamentul / interaciunea (controller)

    unei componente n trei pri de program distincte

    ex. checkbox: boolean, desenare, click Event source model Event listener controller JComponent view & controller, model - separat

  • 12

    Painting Componentele pot fi obligate s se deseneze oricnd (ex. o alt fereastr suprapus dispare) Componenta implementeaz o metod paint () Componenta nu se auto-deseneaz! Decizia se ia de thread-ul (unic) de desenare a UI Componenta poate anuna repaint () Un container invoc desenarea propriilor componentepublic void paint (Graphics g) {

    super.paint ();// ...

    }

    paintComponent () nu deseneaz comp. coninute

  • 13

    Enabling components

    Componentele pot deveni inaccesibile (gri) Metoda setEnabled (true / false)public boolean void actionPerformed (ActionEvent e) { ((JComponent)e.getSource ( )).setEnabled (false);

    }

    Dezactivarea unui container provoac dezactivarea tuturor componentelor

  • 14

    Alte metode JComponent

    Container getParent () String getName () / void setName (String name) void setVisible (boolean visible) Color getForeground () / void setForeground (Color c) Color getBackground () / void setBackground (Color c) Dimension getSize () / void setSize (int w, int h) getPreferredSize () / setPreferredSize () revalidate () Cursor getCursor () / void setCursor (Cursor c)

  • 15

    Containers

    JComponent este un container Containere aplicaie:

    JFrame top level window JWindow fr border, sys menu & buttons JPanel container generic pt. JFrame / JPanel JApplet web browser

    Adugarea / tergerea componentelor se face dinamic cu add () / remove ()

  • 16

    Layout managers

    Obiecte care controleaz aezarea i mrimea componentelor n aria de afiare a unui container Oricrui container i se poate schimba layout manager-ul default prin apelul setLayout () Layouts:

    JPanel FlowLayout (left-to-right, top-to-bot.) JFrame BorderLayout (location, NORTH ..) GridLayout - matricial GridBagLayout similar tabele HTML

  • 17

    Z-Ordering

    Layout-urile folosite nu permit overlapping-ul componentelor

    Dac totui se ajunge n aceast situaie: Ordinea n care au fost adugate n container

    dicteaz ordinea de 'stivuire' Ultima introdus este cea mai de jos (mai puin

    vizibil) Metoda add() permite specificarea, adiional,

    a z-order-ului

  • 18

    JWindow i JFrame

    JFrame este un JWindow ce are title bar, border i se poate redimensiona

  • 19

    Crearea ferestrei principaleclass SwingTest1 { public static void main (String[] args) { JFrame frame = new JFrame ("Frame"); frame.setSize (300, 300); frame.setLocation (100, 100); JWindow window = new JWindow (); window.setSize (300, 300); window.setLocation (500, 100); frame.setDefaultCloseOperation (

    JFrame.EXIT_ON_CLOSE); // frame.setResizable (false); window.setVisible (true); frame.setVisible (true); }}

  • 20

    Content pane

    JWindow i JFrame nu conin direct componente, ci prin intermediul unui content pane getContentPane () este acest container ce acoper suprafaa vizibil Componentele se adaug cu add () la content pane

  • 21

    Adugarea la content pane

    class SwingTest2 { public static void main (String[] args) { JFrame frame = new JFrame ("Frame"); frame.setLocation (100, 100); Container content = frame.getContentPane (); content.setLayout(new FlowLayout ()); content.add (new JLabel ("Kiwi")); content.add (new JButton ("Apple")); frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE); frame.pack (); frame.setVisible (true); }}

  • 22

    Crearea propriului content paneclass SwingTest3 { public static void main (String[] args) { JFrame frame = new JFrame ("Frame"); frame.setLocation (100, 100); Container content = new JPanel (); content.setLayout(new FlowLayout ()); content.add (new JLabel ("Kiwi")); content.add (new JButton ("Apple")); frame.setContentPane (content); frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE); frame.pack (); frame.setVisible (true); }}

  • 23

    Events i Listeners

    Obiectele Swing comunic prin trimiterea de evenimente Evenimentele nu sunt altceva dect obiecte trimise ca parametru unor metode Evenimentele se trimit unuia sau mai multor listeners Un listener se va nregistra anterior ca fiind capabil s primeasc un anumit tip de eveniment nregistrarea listener-ului se face prin implementarea unei interfee ActionEvent corespunde unei aciuni (click, press Enter..) executate asupra unei componente (oricare) MouseEvent furnizeaz doar informaii despre mouse

  • 24

    ActionEvent i ActionListener Listener-ul trebuie s implementeze acest interfa:public interface ActionListener

    extends java.util.EventListener {public void actionPerformed (ActionEvent e);

    }

    O surs de ActionEvent-uri precum JButton are implementat posibilitatea de nregistrare / denregistrare a unui listener:

    public void addActionListener (ActionListener l) { ... }public void removeActionListener (ActionListener l) { ... }

  • 25

    Implementarea unui listenerclass SwingTest4 implements ActionListener { public SwingTest (JFrame frame) { JButton button = new JButton ("Mango"); button.addActionListener (this); Container content = frame.getContentPane (); content.setLayout (new FlowLayout ()); content.add (button); } public void actionPerformed (ActionEvent e) { System.out.println ("button pushed: " + e); } public static void main (String[] args) { JFrame frame = new JFrame ("Frame"); frame.setSize (300, 300); SwingTest4 st = new SwingTest4 (frame); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); frame.setVisible (true); }}

  • 26

    NetBeans 5.0 view

  • 27

    Tipuri de evenimente Superclasa este java.awt.event.ComponentEvent

    java.awt.event.InputEvent java.awt.event.MouseEvent => MouseListener java.awt.event.KeyEvent => KeyListener java.awt.event.ActionEvent => ActionListener

    java.awt.InputEvent definete o serie de modificatori pentru detecia Shift, Ctrl, Alt sau tip de buton de mouse apsat [SHIFT | CTRL | META | ALT | BUTTON[1 | 2 | 3]]_MASK

    public void mousePressed (MouseEvent e) {int mods = e.getModifiers( );if ((mods & InputEvent.SHIFT_MASK) != 0) {

    // buton de mouse apsat concomitent cu Shift}

    }

  • 28

    MVC i adapters

    Dac punem att componentele ct i logica programului laolalt, obinem un monolit:

    greutate n upgradarea codului construcie alambicat

    Prin separarea logicii de partea grafic vom ctiga: claritate separarea conceptelor, deci modificare uoar

    Avem nevoie de un adapter pe post de listener mapeaz un eveniment unei metode de procesare

  • 29

    Implementarea adapter-uluiclass MailMsg { // separm modelul .. String m; public MailMsg (String m) { this.m = m; } public void process (){ System.out.println ("processes mail: " + m); }}

    class MailMsgAdapter implements ActionListener { private MailMsg msg; // .. de controller, iar .. public MailMsgAdapter (MailMsg msg) { this.msg = msg; } public void actionPerformed (ActionEvent e) { msg.process (); }}

  • 30

    GUI cu componenta JButtonclass SwingTest5 { // .. view-ul rmne separat MailMsg msg = new MailMsg ("MSG from Dana"); JButton button = new JButton ("Process"); public SwingTest5 (JFrame frame) { button.addActionListener (new MailMsgAdapter (msg)); Container content = frame.getContentPane (); content.setLayout (new FlowLayout ()); content.add (button); } public static void main(String[] args) { JFrame frame = new JFrame ("Frame"); frame.setSize (300, 300); SwingTest st = new SwingTest (frame); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); frame.setVisible (true); }}

  • 31

    Dummy adapters

    Interfeele listener de regul au multe metode De multe ori nu le implementm pe toate Exist adapters ce definesc metodele empty doar pentru a ne scuti de efortul implementrii Putem deriva din ele n locul interfeei

    class MouseAdapter implements MouseListener, ... {public void mouseClicked (MouseEvent e) {};public void mousePressed (MouseEvent e) {};

    public void mouseReleased(MouseEvent e) {};public void mouseEntered(MouseEvent e) {};public void mouseExited(MouseEvent e) {};...

    }


Recommended