/****************************************************** Cours : ELE116 Session : Automne 2007 Groupe : 01 Projet : Laboratoire #3 Etudiant(e)(s) : Nicolas Luna Rémi St-Onge Code(s) perm. : LUNN27098506 STOR15128308 Professeur : Hicham Mahkoum, Jean-François Pambrun Nom du fichier : Vue1.java Date cree : 2007-11-29 Date dern. modif. ******************************************************* Historique des modifications ******************************************************* 2007-11-29 Version initiale Cette classe est ******************************************************* // $Log: Vue1.java,v $ // Revision 1.6 2007/12/01 19:33:56 remistonge // image maintenant scrolable! // // Revision 1.5 2007/12/01 17:32:34 remistonge // modification pour drag and drop // // Revision 1.4 2007/11/30 21:47:53 remistonge // Image modifiable // // Revision 1.3 2007/11/30 21:31:02 lunaid // Ajout du observer pour etre notifier quand le modele change // // Revision 1.2 2007/11/29 14:53:38 remistonge // changement d'encodage des caractères des fichiers. // // Revision 1.1 2007/11/28 02:12:45 remistonge // Version initiale, création des classes vides // <<<<<<< Vue1.java public class Vue1 { ======= *******************************************************/ import javax.swing.JPanel; import javax.swing.KeyStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.event.*; import java.util.Observer; import java.util.Observable; class Vue1 extends JPanel implements Observer, MouseListener, KeyListener, MouseMotionListener, MouseWheelListener { private Image image; private int x=0; private int y=0; private int offsetX; private int offsetY; private double ancienScale; private int ancienX; private int ancienY; private boolean permettreDrag; private boolean permettreScroll; private Controleur controleur; private int CANEVAS_LARGEUR; private int CANEVAS_HAUTEUR; private double scale=1; public Vue1(int CANEVAS_LARGEUR, int CANEVAS_HAUTEUR,Controleur controleur) { image=getToolkit().getImage("image.jpg"); this.CANEVAS_HAUTEUR = CANEVAS_HAUTEUR; this.CANEVAS_LARGEUR = CANEVAS_LARGEUR; setSize(getPreferredSize()); setMinimumSize(getPreferredSize()); Vue1.this.setBackground(Color.white); addMouseListener(this); addMouseMotionListener(this); addMouseWheelListener(this); addKeyListener(this); this.setFocusable(true); } /** * getPreferredSize retourne la dimension du JPanel * * @return a Dimension value */ public void setImage(String pathImage) { image=getToolkit().getImage(pathImage); } public Dimension getPreferredSize() { return new Dimension(CANEVAS_LARGEUR, CANEVAS_HAUTEUR); } /** * paintComponent contient le code pour le dessin * "fait sur commande" * * @param g a Graphics value */ public void paintComponent(Graphics g) { /* dessiner le fonds (background) -- obligatoire */ super.paintComponent(g); g.setColor(new Color(0xffffff)); g.fillRect(0, 0, CANEVAS_LARGEUR, CANEVAS_HAUTEUR); g.drawImage(image, x, y, (int )(image.getWidth(this)*scale),(int)( image.getHeight(this)*scale),this); } Modele modele; public Vue1(Modele modele) { this.modele = modele; modele.addObserver(this); } public void update(Observable o, Object arg) { System.out.println("CHANGEMENT OBSERVABLE"); } public void mousePressed(MouseEvent e) { if (e.getX() > x && (e.getX() < (x+image.getWidth(this)*scale)) && e.getY() > y && (e.getY() < (y+(int)(image.getHeight(this)*scale)))) { ancienX=e.getX(); ancienY=e.getY(); offsetX=e.getX()-x; offsetY=e.getY()-y; permettreDrag=true; } } public void mouseReleased(MouseEvent e) { if (permettreDrag) { System.out.println("creation translation: x=" + (int)(e.getX()-offsetX) + " y=" + (int)(e.getY()-offsetY) + " scale=" + scale); try { controleur.createTranslation(3, 3, 3, 3); } catch(Error er) { System.out.println("crash"); } permettreDrag=false; } } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseMoved(MouseEvent e) { } public void mouseDragged(MouseEvent e) { if (permettreDrag) { x=e.getX()-offsetX; y=e.getY()-offsetY; repaint(); } } public void mouseWheelMoved(MouseWheelEvent e) { if (permettreScroll) { if(e.getWheelRotation() == 1) { scale=scale/1.2; } else { scale=scale*1.2; } repaint(); } } public void keyPressed(KeyEvent e) { if(e.getKeyCode()==17) { ancienScale=scale; permettreScroll=true; } } public void keyReleased(KeyEvent e) { if (e.getKeyCode()==17) { if (ancienScale != scale) { System.out.println("creation Scale: x=" + x + " y=" +y + " scale=" + scale); controleur.createScale(scale, ancienScale); permettreScroll=false; } } } public void keyTyped(KeyEvent e) { } }