Graafiline kasutajaliides

Sündmuste töötlemine

    Sündmused on klasside hierarhias, mille juureks on EventObject (paketist java.util).

    Sündmuse allikas on objekt, mis teeb kindlaks mingi sündmuse toimumise ning teatab sellest kõigile objektidele, kes on registreerunud antud allika juures antud liiki sündmuste kuulajaks. Sündmuse sisuliseks tarbijaks ongi kuularobjekt, mis realiseerib liidese EventListener (paketist java.util) vastavat alamliidest. Kuulari saab luua kahel viisil:

    1. realiseerides kõik antud liidese meetodid (näit. WindowListener liidese korral meetodid windowClosed, windowIconified, windowOpened, windowClosing, windowDeiconified, windowActivated, windowDeactivated)
    2. spetsialiseerides olemasolevat adapteriklassi (need klassid realiseerivad vastavat liidest ning meil on tarvis tegelda ainult meile huvi pakkuvate sündmustega, näit. windowClosing, ning vastavad meetodid üle katta).


    Registreerumiseks peavad olemas olema nii allikas kui ka kuular. Seejuures võib sama sündmus saada töödeldud mitme erineva kuulari poolt (multicasting), iga kuular saab oma koopia sündmusest.
     

      <allikas>.add<Sündmusetüüp>Listener (<kuular>);



    Näit.
      class AknaAdapter extends WindowAdapter {
        public void windowClosing (WindowEvent e) {
          System.exit (0);
        }
      }

      ...

      raam.addWindowListener (new AknaAdapter());

      Kuulariks on WindowAdapter alamklassi AknaAdapter objekt. Kui raam suletakse, siis saab kuular sellest teada ja käivitab ülekaetud windowClosing meetodi. Tihti kasutatakse siinkohal anonüümseid (ilma nimeta) klasse.
       

    Lisainfot sündmuse kohta saab sündmusest endast. Näit. antud juhul e.getComponent()annab objekti raam.

    Sündmustega seotud klasside hierarhia

         Event (awt: Java 1.0)
         EventQueue (awt)
         EventObject (util)
            AWTEvent (awt)
               ActionEvent (awt.event)
               AdjustmentEvent (awt.event)
               ItemEvent (awt.event)
               TextEvent (awt.event)
               ComponentEvent (awt.event)
                  ContainerEvent (awt.event)
                  FocusEvent (awt.event)
                  WindowEvent (awt.event)
                  PaintEvent (awt.event)
                  InputEvent (awt.event)
                     KeyEvent (awt.event)
                        MenuKeyEvent (swing.event)
                     MouseEvent (awt.event)
                        MenuDragMouseEvent (swing.event)
               AncestorEvent (swing.event) <- AWTEvent (awt)
               InternalFrameEvent (swing.event)
            CaretEvent (swing.event) <- EventObject (util)
            ChangeEvent (swing.event)
            HyperlinkEvent (swing.event)
            ListDataEvent (swing.event)
            ListSelectionEvent (swing.event)
            MenuEvent (swing.event)
            PopupMenuEvent (swing.event)
            TableColumnModelEvent (swing.event)
            TableModelEvent (swing.event)
            TreeExpansionEvent (swing.event)
            TreeModelEvent (swing.event)
            TreeSelectionEvent (swing.event)
            UndoableEditEvent (swing.event)
      Paketi javax.swing.event sündmustest räägime hiljem.

    Liideste hierarhia

         EventListener (util)
            ComponentListener (awt.event)
            ContainerListener (awt.event)
            FocusListener (awt.event)
            KeyListener (awt.event)
            MouseListener (awt.event)
               MouseInputListener (swing.event)
            MouseMotionListener (awt.event)
               MouseInputListener (swing.event)
            WindowListener (awt.event)
            ActionListener (awt.event)
               Action (swing)
            AdjustmentListener (awt.event)
            ItemListener (awt.event)
            TextListener (awt.event)
            AncestorListener (swing.event)
            CaretListener (swing.event)
            DocumentListener (swing.event)
            InternalFrameListener (swing.event)
         DocumentEvent (swing.event)

    Adapteriklassid

         AWTEventMulticaster (awt)
         ComponentAdapter (awt.event)
            JViewport.ViewListener (swing)
         ContainerAdapter (awt.event)
         FocusAdapter (awt.event)
         KeyAdapter (awt.event)
         MouseMotionAdapter (awt.event)
         MouseAdapter (awt.event)
            ToolTipManager (swing)
         MouseInputAdapter (swing.event)
         WindowAdapter (awt.event)
            JMenu.WinListener (swing)
         InternalFrameAdapter (swing.event)

    Sündmuste allikad (awt)



Rakend (Applet)

Graafikaliides, mis "elab" veebilehitsejas. html-dokumendis viitab kompileeritud class-failile <APPLET>-märgis:

    <applet code="HelloJFrame.class" width=200 height=200>
</applet>
Rakendi käitumist juhivad meetodid:
init() - esmane initsialiseerimine, tehakse üks kord alguses
start() - käivitamine, tehakse siis, kui rakend muutub aktiivseks
stop() - peatamine, tehakse siis, kui rakend muutub passiivseks
destroy() - elutsükli lõpp, tehakse üks kord peale viimast stop() rakendamist
paint (Graphics g) - joonistamine
repaint() - tellimus akna värskendamiseks
...
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
* Na"ide rakendist.
* @author Jaanus Poial
* @version 0.1
* @since 1.2
*/
public class Rakend extends JApplet {

/** teksti v2ljastamiseks */
JTextArea tvali;

/** Peameetod rakenduse jaoks, mis omakorda ka"ivitab rakendi.
*/
public static void main (String[] parameetrid) {

// konteiner graafikaelementide paigutamiseks
JFrame raam = new JFrame ("Rakenduse raam");

// JApplet isend (rakend) sinna raami sisse panemiseks
Rakend rakend = new Rakend();

// raami suuruse m22ramine
raam.setSize (210, 230); // ca 200x200 sisu jaoks

// rakendi paigutamine raami sisse
raam.getContentPane().add (rakend); // swing erip2ra

// p66rdume rakendi initsialiseerimiseks
rakend.init();

// p66rdume rakendi k2ivitamiseks
rakend.start();

// raami ekraaniletoomine
raam.setVisible (true);

// raami k2itumise kirjeldus (kuidas reageerib syndmustele)
raam.addWindowListener (new WindowAdapter() {
public void windowClosing (WindowEvent e) {
((Rakend)
((JFrame)e.getWindow()).getContentPane().getComponent (0)).
stop();
((Rakend)
((JFrame)e.getWindow()).getContentPane().getComponent (0)).
destroy();
System.exit (0);
}
public void windowActivated (WindowEvent e) {
e.getWindow().repaint();
}
} );
} // main

public void init() {
tvali = new JTextArea();
getContentPane().add (new JScrollPane (tvali));
tvali.append (".init\n");
} // init

public void start() {
tvali.append (".start\n");
}

public void stop() {
tvali.append (".stop\n");
}

public void destroy() {
tvali.append (".destroy\n");
}

} // Rakend lopp