java - danciu gabrieldanciugabriel.ro/assets/files/awt.pdfdelegation event model...

25
Java Curs 8 Danciu Gabriel Decembrie 2018

Upload: others

Post on 25-Dec-2019

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

JavaCurs 8

Danciu GabrielDecembrie 2018

Page 2: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Applet - structura/*

<applet code="Demo" width=300 height=100>

</applet>

*/

public class Demo extends Applet {

// Called first.

public void init() {

// initialization

}

/* Called second, after init(). Also called whenever

the applet is restarted. */

public void start() {

// start or resume execution

}

// Called when the applet is stopped.

public void stop() {

// suspends execution

}

/* Called when applet is terminated. This is the last

method executed. */

public void destroy() {

// perform shutdown activities

}

// Called when an applet’s window must be restored.

public void paint(Graphics g) {

// redisplay contents of window

}

}

Page 3: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Applet

Page 4: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Exempluimport java.awt.*;

import java.applet.*;

/*

<applet code="Sample" width=300 height=50>

</applet>

*/

public class Demo extends Applet {

String msg;

// set the foreground and background colors.

public void init() {

this.setBackground(Color.cyan);

this.setForeground(Color.red);

msg = "Inside init( ) ->";

}

// Initialize the string to be displayed.

public void start() {

msg += " Inside start( ) ->";

}

// Display msg in applet window.

public void paint(Graphics g) {

msg += " Inside paint( ).";

g.drawString(msg, 10, 30);

}

}

Page 5: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Un bannerpackage demo;

import java.awt.*;

import java.applet.*;

/*

<applet code="SimpleBanner" width=300 height=50>

</applet>

*/

public class Demo extends Applet implements Runnable {

String msg = " A Simple Moving Banner.";

Thread t = null;

int state;

volatile boolean stopFlag;

// Set colors and initialize thread.

public void init() {

setBackground(Color.cyan);

setForeground(Color.red);

}

// Start thread

public void start() {

t = new Thread(this);

stopFlag = false;

t.start();

}

// Entry point for the thread that runs the banner.

public void run() {

// Redisplay banner

for (;;) {

try {

repaint();

Thread.sleep(250);

if (stopFlag)

break;

} catch (InterruptedException e) {}

}

}

// Pause the banner.

public void stop() {

stopFlag = true;

t.interrupt();

t = null;

}

// Display the banner.

public void paint(Graphics g) {

char ch;

ch = msg.charAt(0);

msg = msg.substring(1, msg.length());

msg += ch;

g.drawString(msg, 50, 30);

showStatus("This is shown in the status window.");

}

}

Page 6: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Evenimente

• Event – un obiect ce descrie o schimbare a stării sursei• Exemplu: ActionEvent

• Source – obiectul ce genrează evenimentul• Exemplu: un buton cu metoda addMouseListener(MouseListener e)

• Listener – un obiect care este notificat atunci când are loc un eveniment

• Exemplu: o clasa ce implementeaza interfata MouseMotionListener

Page 7: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Tipuri de evenimente

Page 8: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Surse de evenimente

Page 9: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Interfețe Listener

Page 10: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Delegation Event model

• Implementează interfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa și trata evenimentul dorit.

• Implementează codul de abonare/dezabonare (după caz) astfel ca ascultătorul să poată primi notificări de la evenimentele corespunzătoare• Notă: o sursă poate genera mai multe tipuri de eveniment. Fiecare eveniment

trebuie înregistrat separat. De asemenea un obiect poate genera mai multetipuri de evenimente. De aceea, trebuie să implementeze acele interfețele Listener corespunzătoare evenimentelor care vor fi tratate.

Page 11: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Mouse Eventspackage demo;

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

/*

<applet code="MouseEvents" width=300 height=100>

</applet>

*/

public class Demo extends Applet

implements MouseListener, MouseMotionListener {

String msg = "";

int mouseX = 0, mouseY = 0; // coordinates of mouse

public void init() {

addMouseListener(this);

addMouseMotionListener(this);

}

// Handle mouse clicked.

public void mouseClicked(MouseEvent me) {

// save coordinates

mouseX = 0;

mouseY = 10;

msg = "Mouse clicked.";

repaint();

}

// Handle mouse entered.

public void mouseEntered(MouseEvent me) {

// save coordinates

mouseX = 0;

mouseY = 10;

msg = "Mouse entered.";

repaint();

}

// Handle mouse exited.

public void mouseExited(MouseEvent me) {

// save coordinates

mouseX = 0;

mouseY = 10;

msg = "Mouse exited.";

repaint();

}

// Handle button pressed.

public void mousePressed(MouseEvent me) {

// save coordinates

mouseX = me.getX();

mouseY = me.getY();

msg = "Down";

repaint();

}

// Handle button released.

public void mouseReleased(MouseEvent me) {

// save coordinates

mouseX = me.getX();

mouseY = me.getY();

msg = "Up";

repaint();

}

// Handle mouse dragged.

public void mouseDragged(MouseEvent me) {

// save coordinates

mouseX = me.getX();

mouseY = me.getY();

msg = "*";

showStatus("Dragging mouse at " + mouseX + ", " + mouseY);

repaint();

}

// Handle mouse moved.

public void mouseMoved(MouseEvent me) {

// show status

showStatus("Moving mouse at " + me.getX() + ", " + me.getY());

}

// Display msg in applet window at current X,Y location.

public void paint(Graphics g) {

g.drawString(msg, mouseX, mouseY);

}

}

Page 12: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Keyboard Eventspackage demo;

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

/*

<applet code="SimpleKey" width=300 height=100>

</applet>

*/

public class Demo extends Applet

implements KeyListener {

String msg = "";

int X = 10, Y = 20; // output coordinates

public void init() {

addKeyListener(this);

}

public void keyPressed(KeyEvent ke) {

showStatus("Key Down");

}

public void keyReleased(KeyEvent ke) {

showStatus("Key Up");

}

public void keyTyped(KeyEvent ke) {

msg += ke.getKeyChar();

repaint();

}

// Display keystrokes.

public void paint(Graphics g) {

g.drawString(msg, X, Y);

}

}

Page 13: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Keyboard Eventspackage demo;

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

/*

<applet code="KeyEvents" width=300 height=100>

</applet>

*/

public class Demo extends Applet

implements KeyListener {

String msg = "";

int X = 10, Y = 20; // output coordinates

public void init() {

addKeyListener(this);

}

public void keyPressed(KeyEvent ke) {

showStatus("Key Down");

int key = ke.getKeyCode();

switch (key) {

case KeyEvent.VK_F1:

msg += "<F1>";

break;

case KeyEvent.VK_F2:

msg += "<F2>";

break;

case KeyEvent.VK_F3:

msg += "<F3>";

break;

case KeyEvent.VK_PAGE_DOWN:

msg += "<PgDn>";

break;

case KeyEvent.VK_PAGE_UP:

msg += "<PgUp>";

break;

case KeyEvent.VK_LEFT:

msg += "<Left Arrow>";

break;

case KeyEvent.VK_RIGHT:

msg += "<Right Arrow>";

break;

}

repaint();

}

public void keyReleased(KeyEvent ke) {

showStatus("Key Up");

}

public void keyTyped(KeyEvent ke) {

msg += ke.getKeyChar();

repaint();

}

// Display keystrokes.

public void paint(Graphics g) {

g.drawString(msg, X, Y);

}

}

Page 14: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Clase adapter

Page 15: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Demo - adapterpackage demo;

// Demonstrate an adapter.

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

/*

<applet code="AdapterDemo" width=300 height=100>

</applet>

*/

public class Demo extends Applet {

public void init() {

addMouseListener(new MyMouseAdapter(this));

addMouseMotionListener(new MyMouseMotionAdapter(this));

}

}

class MyMouseAdapter extends MouseAdapter {

Demo adapterDemo;

public MyMouseAdapter(Demo adapterDemo) {

this.adapterDemo = adapterDemo;

}

// Handle mouse clicked.

public void mouseClicked(MouseEvent me) {

adapterDemo.showStatus("Mouse clicked");

}

}

class MyMouseMotionAdapter extends MouseMotionAdapter {

Demo adapterDemo;

public MyMouseMotionAdapter(Demo adapterDemo) {

this.adapterDemo = adapterDemo;

}

// Handle mouse dragged.

public void mouseDragged(MouseEvent me) {

adapterDemo.showStatus("Mouse dragged");

}

}

Page 16: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Clase adapter anonimepackage demo;

// Anonymous inner class demo.

import java.applet.*;

import java.awt.event.*;

/*

<applet code="AnonymousInnerClassDemo" width=200 height=100>

</applet>

*/

public class Demo extends Applet {

public void init() {

addMouseListener(new MouseAdapter() {

public void mousePressed(MouseEvent me) {

showStatus("Mouse Pressed");

}

});

}

}

Page 17: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

AWT - Abstract Window Toolkit

Page 18: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

AWT...

Page 19: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

AWT – big picture

Page 20: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Framepackage demo;

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

/*

<applet code="WindowEvents" width=300 height=50>

</applet>

*/

// Create a subclass of Frame.

class MyFrame extends Frame {

String msg = "";

int mouseX = 10, mouseY = 40;

MyFrame(String title) {

super(title);

// register this object to receive its own mouse events

MyMouseAdapter mouseadapter = newMyMouseAdapter(this);

addMouseListener(mouseadapter);

// create an object to handle window events

MyWindowAdapter adapter = newMyWindowAdapter(this);

// register it to receive those events

addWindowListener(adapter);

}

public void paint(Graphics g) {

g.drawString(msg, mouseX, mouseY);

}

}

class MyMouseAdapter extends MouseAdapter {

MyFrame sampleFrame;

public MyMouseAdapter(MyFrame sampleFrame) {

this.sampleFrame = sampleFrame;

}

@Override

public void mouseClicked(MouseEvent e) {

sampleFrame.mouseX = e.getX();

sampleFrame.mouseY = e.getY();

sampleFrame.msg = "Click";

sampleFrame.repaint();

}

}

class MyWindowAdapter extends WindowAdapter {

MyFrame sampleFrame;

public MyWindowAdapter(MyFrame sampleFrame) {

this.sampleFrame = sampleFrame;

}

public void windowClosing(WindowEvent we) {

sampleFrame.setVisible(false);

}

}

public class Demo {

public static void main(String[] args) {

MyFrame f = new MyFrame("Some title");

f.setVisible(true);

}

}

Page 21: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Drawingpackage demo;

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

/*

<applet code="WindowEvents" width=300 height=50>

</applet>

*/

// Create a subclass of Frame.

class MyFrame extends Frame {

MyFrame(String title) {

super(title);

this.resize(500,800);

MyWindowAdapter adapter = newMyWindowAdapter(this);

// register it to receive those events

addWindowListener(adapter);

}

public void paint(Graphics g) {

g.drawLine(0, 0, 100, 90);

g.drawLine(0, 90, 100, 10);

g.drawLine(40, 25, 250, 80);

// Draw rectangles.

g.drawRect(10, 150, 60, 50);

g.fillRect(100, 150, 60, 50);

g.drawRoundRect(190, 150, 60, 50, 15, 15);

g.fillRoundRect(280, 150, 60, 50, 30, 40);

// Draw Ellipses and Circles

g.drawOval(10, 250, 50, 50);

g.fillOval(90, 250, 75, 50);

g.drawOval(190, 260, 100, 40);

// Draw Arcs

g.drawArc(10, 350, 70, 70, 0, 180);

g.fillArc(60, 350, 70, 70, 0, 75);

// Draw a polygon

int xpoints[] = {10, 200, 10, 200, 10};

int ypoints[] = {450, 450, 650, 650, 450};

int num = 5;

g.drawPolygon(xpoints, ypoints, num);

}

}

class MyWindowAdapter extends WindowAdapter {

MyFrame sampleFrame;

public MyWindowAdapter(MyFrame sampleFrame) {

this.sampleFrame = sampleFrame;

}

public void windowClosing(WindowEvent we) {

System.exit(0);

}

}

public class Demo {

public static void main(String[] args) {

MyFrame f = new MyFrame("Some title");

f.setVisible(true);

}

}

Page 22: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Resizingpackage demo;

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

/*

<applet code="WindowEvents" width=300 height=50>

</applet>

*/

// Create a subclass of Frame.

class MyFrame extends Frame {

@Override

public void resize(int width, int height) {

repaint();

}

final int inc = 25;

int max = 500;

int min = 200;

Dimension d;

MyFrame(String title) {

super(title);

this.resize(500, 800);

MyWindowAdapter adapter = new MyWindowAdapter(this);

// register it to receive those events

addWindowListener(adapter);

addWindowStateListener(adapter);

addMouseListener(new MouseAdapter() {

public void mouseReleased(MouseEvent me) {

int w = (d.width + inc) > max ? min : (d.width + inc);

int h = (d.height + inc) > max ? min : (d.height + inc);

setSize(new Dimension(w, h));

}

});

}

public void paint(Graphics g) {

d = getSize();

g.drawLine(0, 0, d.width - 1, d.height - 1);

g.drawLine(0, d.height - 1, d.width - 1, 0);

g.drawRect(0, 0, d.width - 1, d.height - 1);

}

}

class MyWindowAdapter extends WindowAdapter {

@Override

public void windowStateChanged(WindowEvent e) {

sampleFrame.repaint();

}

MyFrame sampleFrame;

public MyWindowAdapter(MyFrame sampleFrame) {

this.sampleFrame = sampleFrame;

}

public void windowClosing(WindowEvent we) {

System.exit(0);

}

}

public class Demo {

public static void main(String[] args) {

MyFrame f = new MyFrame("Some title");

f.setVisible(true);

}

}

Page 23: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Fontspackage demo;

import java.applet.*;

import java.awt.*;

/*

<applet code="CenterText" width=200 height=100>

</applet>

*/

public class Demo extends Applet {

final Font f = new Font("SansSerif", Font.BOLD, 18);

public void paint(Graphics g) {

Dimension d = this.getSize();

g.setColor(Color.white);

g.fillRect(0, 0, d.width, d.height);

g.setColor(Color.black);

g.setFont(f);

drawCenteredString("This is centered.", d.width, d.height, g);

g.drawRect(0, 0, d.width - 1, d.height - 1);

}

public void drawCenteredString(String s, int w, int h,

Graphics g) {

FontMetrics fm = g.getFontMetrics();

int x = (w - fm.stringWidth(s)) / 2;

int y = (fm.getAscent() + (h -(fm.getAscent()

+ fm.getDescent())) / 2);

g.drawString(s, x, y);

}

}

Page 24: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Imagini/controalepackage demo;

import java.awt.*;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.image.ImageObserver;

public class Demo extends Frame implements ImageObserver {

Image im;

Window w = new PopupWindow(this);

Demo() {

super("PopupButton Example");

im = getToolkit().getImage("1.png");

MediaTracker mt = new MediaTracker(this);

mt.addImage(im, 0);

Dimension d = new Dimension(400, 400);

this.resize(d);

this.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

this.addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

if (e.getButton() == MouseEvent.BUTTON3) {

w.setLocation(e.getX(), e.getY());

w.setVisible(true);

}

}

});

this.show();

try {

mt.waitForAll();

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String args[]) {

Frame f = new Demo();

}

public void paint(Graphics g) {

if (im != null) {

g.drawImage(im, 20, 20, this);

}

}

}

class PopupWindow extends Window {

PopupWindow(Frame f) {

super(f);

Panel p = new Panel();

p.add(new Button("About"));

p.add(new Button("Save"));

p.add(new Button("Quit"));

add("North", p);

setBackground(Color.gray);

pack();

}

public boolean action(Event e, Object o) {

if ("About".equals(o)) {

System.out.println("About");

} else if ("Save".equals(o)) {

System.out.println("Save Me");

} else if ("Quit".equals(o)) {

System.exit(0);

}

hide();

return true;

}

}

Page 25: Java - Danciu Gabrieldanciugabriel.ro/assets/files/AWT.pdfDelegation Event model •Implementeazăinterfața Listener corespunzătoare astfel ca ascultătorul să poată recepționa

Exercitii

• Realizați desenarea unor linii sau trasarea unor puncte asemănător Paint

• Scrieti pe ecran o linie cu diferite caractere. La apasarea tastelor Ctrl+S linia se va salva intr-un fisier la alegere.

• Redimensionati o fereastra. La fiecare redimensionare se vor afisa noile dimensiuni la consola.

• Folosind ultimul exemplu, creati un pop-up menu cu trei butoane: ResetSave si Exit. Scrieti pe ecran o linie cu diferite caractere. Redimensionatifereastra. Pe butonul Reset textul devine “” iar dimensiunea devine300/300. Pe butonul de Save valorile vor fi salvate intr-un fisier. La incarcarea aplicatiei, fisierul va fi citit si aplicatia isi reia starea (text sidimensiune) de la ultimul Save.