Skip to content

Commit f03a6fa

Browse files
committed
E' stato implementato il pattern Observer nella classe Button e Screen introducendo interfaccia MouseObserver
1 parent 4470e3d commit f03a6fa

5 files changed

Lines changed: 114 additions & 14 deletions

File tree

Button.java

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,71 @@
22
* Created by dimaer on 19/03/17.
33
*/
44
import java.awt.*;
5+
import java.awt.event.MouseEvent;
6+
import java.awt.event.MouseListener;
57

6-
public class Button implements Drawable{
8+
public class Button implements Drawable , MouseObserver{
79
private Rectangle boundRect;
8-
10+
private MouseListener mouseListener;
11+
/**
12+
* Costruttore
13+
* @param BoundRect Dimensioni di rettangolo
14+
*/
915
public Button(Rectangle BoundRect)
1016
{
1117
boundRect = BoundRect;
1218
}
19+
20+
/**
21+
* Metodo che imposta le dimensioni di rettangolo
22+
* @param BoundRect Dimensioni di rettangolo
23+
*/
1324
public void setBoundRect(Rectangle BoundRect)
1425
{
1526
boundRect = BoundRect;
1627
}
1728

29+
/**
30+
* Metodo che aggiorna il componente quando esso riceve il messagio (L'evento)
31+
* @param mouseEvent L'evento di mouse
32+
* @param message messagio di evento
33+
*/
34+
@Override
35+
public void update(MouseEvent mouseEvent, String message) {
36+
if(message.equals("MOUSE_CLICKED"))
37+
{
38+
if(isContainMouse(mouseEvent))
39+
mouseListener.mouseClicked(mouseEvent);
40+
41+
}
42+
if(message.equals("MOUSE_MOVED"))
43+
{
44+
if(isContainMouse(mouseEvent))
45+
mouseListener.mouseEntered(mouseEvent);
46+
}
47+
}
48+
49+
/**
50+
*
51+
* @param mouseListener
52+
*/
53+
public void addMouseListener(MouseListener mouseListener){
54+
this.mouseListener = mouseListener;
55+
}
56+
57+
/**
58+
* Metodo che verifica se il puntatore di mouse e' contenuto nel componente
59+
* @param mouseEvent L'evento di mouse
60+
* @return true se e' contenuto nel componente
61+
*/
62+
private boolean isContainMouse(MouseEvent mouseEvent)
63+
{
64+
if(mouseEvent.getX() > boundRect.getX() && mouseEvent.getX() < boundRect.getX() + boundRect.width )
65+
if (mouseEvent.getY() > boundRect.getY() && mouseEvent.getY() < boundRect.getY() + boundRect.height )
66+
return true;
67+
return false;
68+
}
69+
1870
@Override
1971
public void draw(Graphics graphics) {
2072
graphics.drawRect(boundRect.x,boundRect.y,boundRect.width,boundRect.height);

Main.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
* Created by dimaer on 16/03/17.
33
*/
44
import java.awt.*;
5-
import java.awt.event.MouseAdapter;
6-
import java.awt.event.MouseEvent;
75
import java.awt.event.WindowAdapter;
86
import java.awt.event.WindowEvent;
97

MouseObserver.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import java.awt.event.MouseEvent;
2+
3+
/**
4+
* Created by dimaer on 22/03/17.
5+
*/
6+
public interface MouseObserver {
7+
void update(MouseEvent mouseEvent,String message);
8+
}

Screen.java

Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,83 @@
22
* Created by dimaer on 19/03/17.
33
* La classe principale di rendering
44
*/
5-
import javax.accessibility.Accessible;
6-
import javax.accessibility.AccessibleContext;
7-
import javax.swing.*;
85
import java.awt.*;
96
import java.awt.Rectangle;
107
import java.awt.event.MouseAdapter;
118
import java.awt.event.MouseListener;
129
import java.awt.event.MouseEvent;
13-
import java.io.IOException;
10+
import java.util.ArrayList;
1411

1512
public class Screen extends Canvas{
16-
Sprite sprite;
17-
13+
private Sprite sprite;
1814
private int width,height;
19-
20-
15+
private Button button;
16+
private ArrayList<MouseObserver> observers;
2117
@Override
2218
public synchronized void addMouseListener(MouseListener mouseListener) {
2319
super.addMouseListener(mouseListener);
2420
}
2521

2622
public Screen(int Width, int Height)
2723
{
24+
initMouseListeners();
25+
button = new Button(new Rectangle(10,10,40,40));
26+
27+
observers = new ArrayList<>();
28+
observers.add(button);
2829
width= Width;
2930
height = Height;
3031

3132
sprite = new Sprite(new Point(20,20));
3233
sprite.setImage("src/1.jpg");
34+
35+
button.addMouseListener(new MouseAdapter() {
36+
@Override
37+
public void mouseClicked(MouseEvent mouseEvent) {
38+
System.out.print("Clicked");
39+
}
40+
41+
@Override
42+
public void mouseEntered(MouseEvent mouseEvent) {
43+
//System.out.print("Entered");
44+
}
45+
});
46+
}
47+
48+
private void initMouseListeners()
49+
{
50+
addMouseListener(new MouseAdapter() {
51+
@Override
52+
public void mouseClicked(MouseEvent mouseEvent) {
53+
super.mouseClicked(mouseEvent);
54+
NotifyObservers(mouseEvent , "MOUSE_CLICKED");
55+
}
56+
});
57+
58+
addMouseMotionListener(new MouseAdapter() {
59+
@Override
60+
public void mouseMoved(MouseEvent mouseEvent) {
61+
super.mouseMoved(mouseEvent);
62+
NotifyObservers(mouseEvent,"MOUSE_MOVED");
63+
}
64+
});
65+
66+
}
67+
68+
private void NotifyObservers(MouseEvent mouseEvent , String message)
69+
{
70+
for(MouseObserver observer : observers)
71+
{
72+
observer.update(mouseEvent,message);
73+
}
3374
}
3475

3576
@Override
3677
public void paint(Graphics graphics) {
3778
super.paint(graphics);
3879
setBackground(new Color(100));
39-
//rectangle.draw(graphics);
40-
sprite.draw(graphics);
80+
button.draw(graphics);
81+
//sprite.draw(graphics);
4182

4283
}
4384

Sprite.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
* La classe Sprite rappresenta il componente principale di rendering
1010
*
1111
*/
12+
1213
public class Sprite implements Drawable {
1314

1415
private Point position;

0 commit comments

Comments
 (0)