rendered paste body/******************************************************
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);
}
/**
* <code>getPreferredSize</code> retourne la dimension du JPanel
*
* @return a <code>Dimension</code> value
*/
public void setImage(String pathImage)
{
image=getToolkit().getImage(pathImage);
}
public Dimension getPreferredSize()
{
return new Dimension(CANEVAS_LARGEUR, CANEVAS_HAUTEUR);
}
/**
* <code>paintComponent</code> contient le code pour le dessin
* "fait sur commande"
*
* @param g a <code>Graphics</code> 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)
{
}
}