Download presentation
Presentation is loading. Please wait.
1
Java events
2
Teme Opšta strategija asinhrone obrade događaja (asynchronous event-handling) Opcije obrade događaja Obrada pomoću odvojenih slušača (listeners) Obrada pomoću implementacije interfejsa Obrada pomoću imenovane ugnježdene klase Obrada pomoću anonimne ugnježdene klase Standardni AWT tipovi slušača Detalji sa događajima miša Primjeri
3
Opšta strategija Odredimo tip slušača koji nas zanima
11 standardnih AWT tipova listenera: ActionListener, AdjustmentListener, ComponentListener, ContainerListener, FocusListener, ItemListener, KeyListener, MouseListener, MouseMotionListener, TextListener, WindowListener Definišemo klasu tog tipa Implementira inetrfejs (KeyListener, MouseListener, itd.) Nasljeđuje klasu (KeyAdapter, MouseAdapter, itd.) Registrujemo objekat naše klase listenera w.addXxxListener(new MyListenerClass()); Npr. addKeyListener, addMouseListener
4
Obrada pomoću odvojenih slušača (listeners)
5
Obrada pomoću odvojenih slušača (listeners)
Slušač ne mora da poziva nijedan metod prozora za koji je zakačen import java.applet.Applet; import java.awt.*; public class ClickReporter extends Applet { public void init() { setBackground(Color.YELLOW); addMouseListener(new ClickListener()); }
6
Obrada pomoću odvojenih slušača (listeners)
import java.awt.event.*; public class ClickListener extends MouseAdapter { public void mousePressed(MouseEvent event) { System.out.println("Mouse pressed at (" + event.getX() + "," + event.getY() + ")."); }
7
Složeniji slučaj Klik na miša crta krug import java.applet.Applet;
import java.awt.*; public class CircleDrawer1 extends Applet { public void init() { setForeground(Color.BLUE); addMouseListener(new CircleListener()); }
8
Složeniji slučaj import java.applet.Applet; import java.awt.*;
import java.awt.event.*; public class CircleListener extends MouseAdapter { private int radius = 25; public void mousePressed(MouseEvent event) { Applet app = (Applet)event.getSource(); Graphics g = app.getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius, 2*radius, 2*radius); }
9
Obrada pomoću implementacije interfejsa
10
Pregled interfejsa Shape interface Klasa Circle
public interface Shape { public double getArea(); // No body, just specification } Klasa Circle public class Circle implements Shape { public double getArea() { some real code } Napomena: Jedna klasa može implementirati više interfejsa public class MyClass implements Foo, Bar, Baz{ … }
11
Pregled interfejsa Klasa se može tretirati kao interfejs
public interface Shape { public double getArea(); } public class Circle implements Shape { … } public class Rectangle implements Shape { … } Shape[] shapes = { new Circle(…), new Rectangle(…) … }; double sum = 0; for(Shape s: shapes) { sum = sum + s.getArea();
12
Source za MouseListener
public interface 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); } public abstract 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) {}
13
Obrada pomoću implementacije interfejsa
import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class CircleDrawer2 extends Applet implements MouseListener { private int radius = 25; public void init() { setForeground(Color.BLUE); addMouseListener(this); }
14
Obrada pomoću implementacije interfejsa (nastavak)
public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {} public void mouseReleased(MouseEvent event) {} public void mouseClicked(MouseEvent event) {} public void mousePressed(MouseEvent event) { Graphics g = getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius, 2*radius, 2*radius); }
15
Adapateri vs. Interfejsi
Šta ako zabrljamo sa zaglavljem metoda? Npr. public void mousepressed(MouseEvent e) public void mousePressed() Interfaces - Compile time error Adapters – Nema compile time error, ali se ništa neće desiti kada se klikne na dugme miša Rješenje za adaptere (i za redefinisaje u Java 5+ anotacija. Kada mislimo da redefinišemo (overriding) metod, dodamo: u red iznad početka metoda. Ako taj metod stvarno ne redefiniše naslijeđeni metod, dobijamo compile-time error.
16
@Override primjer public class CircleDrawer1 extends Applet {
public void init() { setForeground(Color.BLUE); addMouseListener(new CircleListener()); } public class CircleListener extends MouseAdapter { private int radius = 25; public void mousePressed(MouseEvent event) { Applet app = (Applet)event.getSource(); Graphics g = app.getGraphics(); g.fillOval(event.getX()-radius,event.getY()- radius, 2*radius, 2*radius);
17
Obrada pomoću imenovane ugnježdene klase
18
Obrada pomoću imenovane ugnježdene klase
import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class CircleDrawer3 extends Applet { public void init() { setForeground(Color.BLUE); addMouseListener(new CircleListener()); }
19
Obrada pomoću imenovane ugnježdene klase (nastavak)
private class CircleListener extends MouseAdapter { private int radius = 25; public void mousePressed(MouseEvent event) { Graphics g = getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius, 2*radius, 2*radius); } Ovo je nastavak klase sa prethodnog slajda
20
Obrada pomoću anonimne ugnježdene klase
21
Obrada pomoću anonimne ugnježdene klase
public class CircleDrawer4 extends Applet { public void init() { setForeground(Color.BLUE); addMouseListener (new MouseAdapter() { private int radius = 25; public void mousePressed(MouseEvent event) { Graphics g = getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius,2*radius, 2*radius); } });
22
Pregled načina obrade
23
Za i protiv Obrada pomoću odvojenih slušača (listeners)
Za: mogu naslijediti adapter klasu i ignorisati nepotrebne metode Za: lakše je održavati odvojene klase Protiv: potreban je dodatni korak za poziv metoda iz glavnog prozora Obrada pomoću implementacije interfejsa Za: nema dodatnih koraka za pozivanje metoda Protiv: moraju se implementirati nepotrebni metodi
24
Za i protiv (nastavak) Obrada pomoću imenovane ugnježdene klase
Za: mogu naslijediti adapter klasu i ignorisati nepotrebne metode Za: nema dodatnih koraka za pozivanje metoda Protiv: teške za razumijevanje Obrada pomoću anonimne ugnježdene klase Za: isto kao imenovane ugnježdene klase ali su još kraće Protiv: još teže za razumijevanje
25
Pregled event listenera
26
Standardni AWT event listeneri
27
ActionListener • AdjustmentListener • ComponentListener
Obrada dugmadi i još nekih akcija actionPerformed(ActionEvent event) • AdjustmentListener Primjena na skrolovanje adjustmentValueChanged(AdjustmentEvent event) • ComponentListener Obrada pomjeranja/sakrivanja/promjene veličine GUI objekata componentResized(ComponentEvent event) componentMoved (ComponentEvent event) componentShown(ComponentEvent event) componentHidden(ComponentEvent event)
28
ContainerListener FocusListener
Okida se kada prozor dodaje/uklanja GUI kontrole componentAdded(ContainerEvent event) componentRemoved(ContainerEvent event) FocusListener Detektuje kada kontrola dobija/gubi fokus sa tastature focusGained(FocusEvent event) focusLost(FocusEvent event)
29
ItemListener KeyListener Obrada selekcija u listama, check-box, itd.
itemStateChanged(ItemEvent event) KeyListener Detektuje događaje tastature keyPressed(KeyEvent event) – bilo koji taster je pritisnut keyReleased(KeyEvent event) – otpušten keyTyped(KeyEvent event) – taster za karakter koji se može štampati
30
MouseListener MouseMotionListener Osnovni događaji miša
mouseEntered(MouseEvent event) mouseExited(MouseEvent event) mousePressed(MouseEvent event) mouseReleased(MouseEventevent) mouseClicked(MouseEvent event) Otpuštanje bez povlačenja. Do not use this for mousePressed! Primjenjuju se ako nema pomjeranja miša MouseMotionListener Obrada pokreta miša mouseMoved(MouseEvent event) mouseDragged(MouseEventevent)
31
U paketu javax.swing.event, a ne u java.awt.event
MouseInputListener Kombinuje MouseListener i MouseMotionListener U paketu javax.swing.event, a ne u java.awt.event Morate pozivati oba: addMouseListener i addMouseMotionListener, pa nema uštede TextListener Koristi se sa textfields i text areas textValueChanged(TextEvent event) WindowListener Obrada događaja prozora (high-level window events) windowOpened, windowClosing, windowClosed,windowIconified, windowDeiconified, windowActivated, windowDeactivated windowClosing je posebno upotrebljiv
32
Primjeri
33
Klasa SimplePaint import java.applet.Applet; import java.awt.Color;
import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; public class SimplePaint extends Applet{ protected int lastX,lastY; public int getLastX() { return lastX; } public void setLastX(int lastX) { this.lastX = lastX; public int getLastY() { return lastY; public void setLastY(int lastY) { this.lastY = lastY;
34
Klasa SimplePaint @Override public void init(){
setBackground(Color.WHITE); setForeground(Color.BLUE); addMouseListener(new PositionRecorder()); addMouseMotionListener(new LineDrawer()); } private class PositionRecorder extends MouseAdapter { public void mousePressed(MouseEvent event) { setLastX(event.getX()); setLastY(event.getY()); // da postavimo pocetnu poziciju nase krive private class LineDrawer extends MouseMotionAdapter { public void mouseDragged(MouseEvent event) { int x = event.getX(); int y = event.getY(); Graphics g = getGraphics(); g.drawLine(lastX, lastY, x, y);
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.