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 :
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.