Zone de clic sur image java

Résolu
carotteblleue - 30 mars 2013 à 13:17
 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.

2 réponses

cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
1 avril 2013 à 09:10
Salut,
utilises les balises de mises en forme pour que quelqu'un ait envie de lire. C'est difficilement lisible en l'état.

hop();
3
carotteblleue
1 avril 2013 à 10:33
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.
0
Rejoignez-nous