import javax.swing.JApplet; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.Color; import java.awt.Shape; import java.awt.Font; import java.awt.event.MouseEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseMotionAdapter; public class CreaVillaggio extends JApplet{ private Villaggio mioVillaggio; private Point2D.Double inizio; private Rectangle2D.Double rettangoloCorrente; private double inizioX; private double inizioY; public CreaVillaggio() { mioVillaggio = new Villaggio(15); // la classe interna AscoltaClick ascolta i click del mouse class AscoltaClick extends MouseAdapter { public void mousePressed(MouseEvent e) { inizioX = e.getX(); inizioY = e.getY(); rettangoloCorrente = new Rectangle2D.Double(inizioX, inizioY, 0, 0); repaint(); } public void mouseReleased(MouseEvent e) { Casetta nuovoEdificio = new Casetta(rettangoloCorrente, Color.red); mioVillaggio.aggiungi(nuovoEdificio); rettangoloCorrente = null; repaint(); } } /* * la classe interna AscoltaMovimento ascolta i movimenti del mouse * Possono essere ridefiniti i metodi * * mouseMoved(MouseEvent), che avviene quando si muove il mouse * mouseDragged(MouseEvent), che avviene quando si muove il mouse con il tasto premuto */ class AscoltaMovimento extends MouseMotionAdapter { public void mouseDragged(MouseEvent e) { int x = e.getX(); int y = e.getY(); rettangoloCorrente.setRect(inizioX, inizioY, x-inizioX, y-inizioY); repaint(); } } MouseAdapter ascoltaEventi = new AscoltaClick(); addMouseListener(ascoltaEventi); MouseMotionAdapter ascoltaMosse = new AscoltaMovimento(); addMouseMotionListener(ascoltaMosse); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; /* clearRect pulisce l'area specificata, * permettendo di ripartire dal riquadro bianco */ g2.clearRect(0,0,getWidth()-1,getHeight()-1); if(rettangoloCorrente!=null) g2.draw(rettangoloCorrente); mioVillaggio.disegna(g2); } }