Zone de clic sur image java [Résolu]

- - Dernière réponse :  carotteblleue - 1 avril 2013 à 10:33
Bonjour et merci à ceux qui vont lire ce message.
je fait appel à votre aide pour combler un manque de connaissance dans la programmation java.
Après avoir chercher comment faire une zone de clic sur une image dans une fenêtre java, j'ai trouvé un code fonctionnel. le problème n'étant pas tellement le code mais plutôt comment le "doublé". le code permet de crée un zone de clic qui répond en fonction de la souris. Cependant je n'arrive pas à crée une deuxième zone de clic indépendante de la première, puisque mes seuls résultats concrets sont une disparition de la première zone de clic pour laisser place à une deuxième crée à la suite. Mais un "bon" code valant mieux qu'un bon discours :


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class Frame extends JFrame {

private static final long serialVersionUID = 1L;

public Frame() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(1000, 600);
setLocationRelativeTo(null);
BufferedImage img = null;
try {
img = ImageIO.read(new File("Background0.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
setContentPane(new MyCanvas(img));

try {
img = ImageIO.read(new File("Background0.jpg"));
} catch (IOException a) {
a.printStackTrace();
}
setContentPane(new MyCanvas3(img));
}

public static void main(String[] args) {
new Frame().setVisible(true);
}

public static class MyCanvas extends JComponent implements MouseListener {

private static final long serialVersionUID = 1L;
// position de la première zone de limage que l'on veut (ici elle se trouve au pixel x=0, y=0 et s'étend sur width=30 et height=30)
private static final Rectangle ZONE_IMAGE_1 = new Rectangle(0, 30, 30, 30);
// position de la première zone de limage que l'on veut (ici elle se trouve au pixel x=300, y=300 et s'étend sur width=30 et height=40)
private static final Rectangle ZONE_IMAGE_2 = new Rectangle(0, 50, 30, 40);
// image à dessiner

private BufferedImage buff = null;



public MyCanvas(BufferedImage img) {
this.addMouseListener(this);
this.buff = img;
}

public void paintComponent(Graphics g1) {
// dessine l'image
g1.drawImage(buff, 0, 0, buff.getWidth(), buff.getHeight(), this);
// juste histoire de voir ou se trouvent les zones (plus facil pour le test ^^)
g1.setColor(Color.RED);
g1.drawRect(ZONE_IMAGE_1.x, ZONE_IMAGE_1.y, ZONE_IMAGE_1.width, ZONE_IMAGE_1.height);
g1.drawRect(ZONE_IMAGE_2.x, ZONE_IMAGE_2.y, ZONE_IMAGE_2.width, ZONE_IMAGE_2.height);
}

private void testLocation(Point mouse, Rectangle area, String text) {
// test si la souris est dans les data de l'image
if(area.contains(mouse))
System.out.println(text + " - image");
else
System.out.println(text + " - !image");
}

public void mouseClicked(MouseEvent e) {
//récupération de la position de la souri
Point p = e.getPoint();
testLocation(p, ZONE_IMAGE_1, "mouseClicked - data 1");
testLocation(p, ZONE_IMAGE_2, "mouseClicked - data 2");
}

public void mousePressed(MouseEvent e) {
//récupération de la position de la souri
Point p = e.getPoint();
testLocation(p, ZONE_IMAGE_1, "mousePressed - data 1");
testLocation(p, ZONE_IMAGE_2, "mousePressed - data 2");
}
public void mouseReleased(MouseEvent e) {
//récupération de la position de la souri
Point p = e.getPoint();
testLocation(p, ZONE_IMAGE_1, "mouseReleased - data 1");
testLocation(p, ZONE_IMAGE_2, "mouseReleased - data 2");
}

public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }

}

public static class MyCanvas3 extends JComponent implements MouseListener {

private static final long serialVersionUID = 1L;
// position de la première zone de limage que l'on veut (ici elle se trouve au pixel x=0, y=0 et s'étend sur width=30 et height=30)
private static final Rectangle ZONE_IMAGE_3 = new Rectangle(100, 10, 30, 30);
// position de la première zone de limage que l'on veut (ici elle se trouve au pixel x=300, y=300 et s'étend sur width=30 et height=40)
private static final Rectangle ZONE_IMAGE_4 = new Rectangle(200, 50, 30, 40);
// image à dessiner
private BufferedImage buff = null;



public MyCanvas3(BufferedImage img) {
this.addMouseListener(this);
this.buff = img;
}

public void paintComponent(Graphics g2) {
// dessine l'image
g2.drawImage(buff, 0, 0, buff.getWidth(), buff.getHeight(), this);
// juste histoire de voir ou se trouvent les zones (plus facil pour le test ^^)
g2.setColor(Color.GREEN);
g2.drawRect(ZONE_IMAGE_3.x, ZONE_IMAGE_3.y, ZONE_IMAGE_3.width, ZONE_IMAGE_3.height);
g2.drawRect(ZONE_IMAGE_4.x, ZONE_IMAGE_4.y, ZONE_IMAGE_4.width, ZONE_IMAGE_4.height);
}

private void testLocation(Point mouse, Rectangle area1, String text) {
// test si la souris est dans les data de l'image
if(area1.contains(mouse))
System.out.println(text + " - image");
else
System.out.println(text + " - !image");
}

public void mouseClicked(MouseEvent a) {
//récupération de la position de la souri
Point p = a.getPoint();
testLocation(p, ZONE_IMAGE_3, "mouseClicked - data 3");
testLocation(p, ZONE_IMAGE_4, "mouseClicked - data 4");
}

public void mousePressed(MouseEvent a) {
//récupération de la position de la souri
Point p = a.getPoint();
testLocation(p, ZONE_IMAGE_3, "mousePressed - data 3");
testLocation(p, ZONE_IMAGE_4, "mousePressed - data 4");
}
public void mouseReleased(MouseEvent a) {
//récupération de la position de la souri
Point p = a.getPoint();
testLocation(p, ZONE_IMAGE_3, "mouseReleased - data 3");
testLocation(p, ZONE_IMAGE_4, "mouseReleased - data 4");
}

public void mouseEntered(MouseEvent a) { }
public void mouseExited(MouseEvent a) { }

}
}

Voilà, merci d'avance, prenez en compte le fait que je suis débutant. Ce projet étant celui d'un terminale S matière informatique.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
719
Date d'inscription
lundi 5 décembre 2005
Dernière intervention
8 janvier 2014
3
Merci
Salut,
utilises les balises de mises en forme pour que quelqu'un ait envie de lire. C'est difficilement lisible en l'état.

hop();

Merci cs_AlexN 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de cs_AlexN
0
Merci
Salut, excusé moi pour le dérangement mais finalement j'ai eu de l'aide entre temps et maintenant ça marche. Merci de la réponse.
Commenter la réponse de carotteblleue

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.