[ Pobierz całość w formacie PDF ]
.Stanzdarzenia jest istotny ze względu na obsługę zdarzenia, a więc na wykonanieodpowiedniego działania związanego z wartościami pól obiektu zdarzenia.Referencja do obiektu odpowiedniego zdarzenia jest podawana jako argument przywykonywaniu metody obsługującej to zdarzenie.Metody związane ze zdarzeniami sąpogrupowane jako zbiory abstrakcyjnych metod w interfejsach lub jako zbiorypustych metod w klasach (adaptery).Zadaniem programisty jest definicja metodwykorzystywanych do obsługi zdarzeń.Następujące interfejsy i adaptery sązdefiniowane w Javie:5-27Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA Rozdział 5Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA Interfejs lub MetodyadapterActionListener actionPerformed(ActionEvent)AdjustmentListener adjustmentValueChanged(AdjustmentEvent)ComponentListener componentHidden(ComponentEvent)ComponentAdapter componentShown(ComponentEvent)componentMoved(ComponentEvent)componentResized(ComponentEvent)ContainerListener componentAdded(ContainerEvent)ContainerAdapter componentRemoved(ContainerEvent)FocusListener focusGained(FocusEvent)FocusAdapter focusLost(FocusEvent)KeyListener keyPressed(KeyEvent)KeyAdapter keyReleased(KeyEvent)keyTyped(KeyEvent)MouseListener mouseClicked(MouseEvent)MouseAdapter mouseEntered(MouseEvent)mouseExited(MouseEvent)mousePressed(MouseEvent)mouseReleased(MouseEvent)MouseMotionListener mouseDragged(MouseEvent)MouseMotionAdapter mouseMoved(MouseEvent)WindowListener windowOpened(WindowEvent)WindowAdapter windowClosing(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)ItemListener itemStateChanged(ItemEvent)TextListener textValueChanged(TextEvent)Wykonując metodę obsługującą zdarzenie można wykorzystać pola obiektu danegozdarzenia.Możliwość ta pozwala określić okoliczności wystąpienia zdarzenia np.:współrzędne kursora podczas generacji zdarzenia, typ klawisza klawiatury jaki byłwciśnięty, nazwę komponentu zródłowego dla danego zdarzenia, stan lewegoprzycisku myszki podczas zdarzenia, itp.Analiza pól obiektu jest zatem niezwykleistotna z punktu widzenia działania tworzonego interfejsu graficznego.Poniższy program ukazuje obsługę zdarzeń związanych z klawiaturą i myszką:Przykład 5.15://Komunikator.java:import java.awt.*;import java.awt.event.*;class Ekran extends Canvas{public String s="Witam";private Font f;Ekran (){super();5-28Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA Rozdział 5Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA f = new Font("Times New Roman",Font.BOLD,20);setFont(f);addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent ke){s=new String(ke.paramString());repaint();}});addMouseListener(new MouseAdapter(){public void mousePressed(MouseEvent me){s=new String(me.paramString());repaint();}});}public void paint(Graphics g){g.drawString(s,20,220);}}// koniec class Ekranpublic class Komunikator extends Frame {Komunikator (String nazwa){super(nazwa);}public static void main(String args[]){Komunikator okno = new Komunikator("Komunikator");okno.setSize(600,500);Ekran e = new Ekran();okno.add(e);okno.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.out.println("Dziekujemy za prace z programem.");System.exit(0);}});okno.setVisible(true);}}// koniec public class KomunikatorW przykładzie tym zastosowano komponent Canvas stanowiący pole graficzne, wobrębie którego można rysować używając metod zdefiniowanych w klasie Graphics.Z polem graficznym związano obsługę dwóch typów zdarzeń: wciśnięcie klawiszaklawiatury (keyPressed()) oraz wciśnięcie klawisza myszki (mousePressed()).Zdarzenia te są opisane w obiektach klas KeyEvent oraz MouseEvent.Każdy obiektprzechowuje informacje związane z powstałym zdarzeniem i dlatego można te pola5-29Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA Rozdział 5Jacek Rumiński - Język JAVA Jacek Rumiński - Język JAVA odczytać celem wyświetlenia ich wartości.W powyższym przykładzie zasotosowanometodę paramString() zwracającą wartości pól obiektu w postaci łańcucha znaków(String).W przypadku wystąpienia zdarzenia i jego obsługi za pomocą omawianychmetod generowana jest metoda repaint() powodująca odświeżenie pola graficznego.Warto zauważyć, że w definiowaniu klas anonimowych obsługujących zdarzeniazastosowano adaptery.Jak wspomniano wcześniej jest to na tyle wygodne wprzeciwieństwie od implementacji interfejsów, że nie trzeba definiować wszystkichmetod w nich zawartych (zadeklarowanych).5-30
[ Pobierz całość w formacie PDF ]