begin process at 2012 02 15 14:35:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Débutant(e)

 > 

création d'une zone cliquable


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

création d'une zone cliquable

lundi 21 janvier 2008 à 22:46:32 | création d'une zone cliquable

ldumont

Bonjour,
je débute en java et je cherche un moyen de créer une zone cliquable sur une image.
Je ne vois pas comment rendre une partie de l'image sensible au clic. Une fois qu'une zone sera définie il me suffira de faire un MouseListener sur la zone je pense mais comment définir cet emplacement....
Je dois concevoir un régulateur de vitesse. J'utilise une photo de tableau de bord et j'aimerais pouvoir cliquer sur le " + " par exemple présent sur le volant pour augmenter la vitesse du véhicule.
Est ce que ce que je souhaite faire est réalisable sous Java et si oui comment?
Merci d'avance
mardi 22 janvier 2008 à 09:45:43 | Re : création d'une zone cliquable

Twinuts

Membre Club Administrateur CodeS-SourceS
Salut,

ajoute un MouseListener sur l'objet graphique qui contient ton image et spy la zone où se trouve ton image afin de savoir si un clic est fait dessus ou non.




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
mardi 22 janvier 2008 à 10:19:30 | Re : création d'une zone cliquable

ldumont

oui ça aurait pu être la solution si je voulais que toute l'image soit cliquable mais je veux seulement que quelques parties de cette image le soit.
Et ça veut dire quoi exactement " spy la zone " , je devine, mais en java je vois pas trop comment ça se code.
mardi 22 janvier 2008 à 10:34:15 | Re : création d'une zone cliquable

Twinuts

Membre Club Administrateur CodeS-SourceS
Salut,

au plus simple, tu prends le Rectangle de ta zone (de l'image) et tu tests si la souris est dedans ou non ^^




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
mardi 22 janvier 2008 à 10:38:44 | Re : création d'une zone cliquable

ldumont

tu veux dire que je superpose un petit rectangle à une parcelle de mon image? Et pour trouver la bonne position je fais comment? Je cherche à taton les coordonnées en pixel? Que de questions pour un seul message.

En tout cas merci de vos réponses si rapides!
mardi 22 janvier 2008 à 11:52:47 | Re : création d'une zone cliquable

Twinuts

Membre Club Administrateur CodeS-SourceS
Salut,

heu nan pas exactement... voici un petit bout de code d'exemple illustrant l'idée :

les textes en gras explique ce que je voulais dire

import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
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    = 4983727800375272097L;

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

    }

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

    private class MyCanvas extends JComponent implements MouseListener {

        private static final long    serialVersionUID    = 8845913940083986438L;
        // image à dessiner
        private BufferedImage        buff                = null;
        // data de l'image
        private Raster                data                = null;
       
        public MyCanvas(BufferedImage img) {
            this.addMouseListener(this);
            this.buff = img;
            this.data = img.getData();

        }
       
        public void paintComponent(Graphics g) {
            // dessine l'image
            g.drawImage(buff, 0, 0, buff.getWidth(), buff.getHeight(), this);
        }
       
        private void testLocation(Point mouse, String text) {
            // test si la souris est dans les data de l'image
            if(data.getBounds().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, "mouseClicked");

        }
       
        public void mousePressed(MouseEvent e) {
            //récupération de la position de la souri
            Point p = e.getPoint();
            testLocation(p, "mousePressed");

        }
        public void mouseReleased(MouseEvent e) {
            //récupération de la position de la souri
            Point p = e.getPoint();
            testLocation(p, "mouseReleased");

        }

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



------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
mardi 22 janvier 2008 à 12:15:58 | Re : création d'une zone cliquable

ldumont

ton code marche nickel; c'est exactement ce que je veux, mais le seul hic, c'est que je souhaiterai que cela ne se fasse que sur une partie de mon image, que le reste de l'image soit neutre par exemple.

Je vais essayer d'expliciter un peu : ma fenetre principale est en fait un tableau de bord, avec donc le volant, les compteurs et puis un pad sur le volant, avec une touche ' + ' et une touche ' - '
Je cherche à savoir si l'utilisateur a appuyé sur la touche ' + ' par exemple pour donner l'ordre d'augmenter la vitesse, à mon régulateur de vitesse.

Mon problème réside dans la détection de l'appui sur le ' + ' ou le ' - ' qui sont deux parties distinctes de l'image.
Il faudrait que j'arrive à faire ce que tu m'as permis de faire grâce à ton code mais sur une partie restreinte de l'image. Donc je dois délimiter une zone et c'est la que je pêche.

Vraiment merci d'avoir passé du temps en tout cas, ça ma quand même fait avancer! Et puis je crois que je n'ai pas été assez claire au début.
C'est incroyable de pouvoir être aidée par de parfaits inconnus et d'une façon totalement désinteressée.
mardi 22 janvier 2008 à 12:52:21 | Re : création d'une zone cliquable

Twinuts

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Salut,

bah l'entraide c'est fait pour ça ^^

pour ton problème on va concerver le code ci-dessus et le modifier un chouilla de façon à permettre de ne prendre que des zones de l'image (oui, oui c'est possible et simplement en plus ^^)

comme taleur les modification sont en gras


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    = 4983727800375272097L;

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

    }

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

    private static class MyCanvas extends JComponent implements MouseListener {

        private static final long    serialVersionUID    = 8845913940083986438L;
        // 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=10 et height=10)
        private static final Rectangle    ZONE_IMAGE_1 = new Rectangle(0, 0, 10, 10);
        // position de la première zone de limage que l'on veut (ici elle se trouve au pixel x=100, y=100 et s'étend sur width=30 et height=20)
        private static final Rectangle    ZONE_IMAGE_2 = new Rectangle(100, 100, 30, 20);

        // image à dessiner
        private BufferedImage buff          = null;
       
       
      
        public MyCanvas(BufferedImage img) {
            this.addMouseListener(this);
            this.buff = img;
        }
      
        public void paintComponent(Graphics g) {
            // dessine l'image
            g.drawImage(buff, 0, 0, buff.getWidth(), buff.getHeight(), this);
            // juste histoire de voir ou se trouvent les zones (plus facil pour le test ^^)
            g.setColor(Color.GREEN);
            g.drawRect(ZONE_IMAGE_1.x, ZONE_IMAGE_1.y, ZONE_IMAGE_1.width, ZONE_IMAGE_1.height);
            g.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) { }
      
    }
}






PS : pour prendre une portion d'une image tu peux utiliser la méthode suivante :
Toolkit tk = Toolkit.getDefaultToolkit();
// position de l'image à prendre dans l'image source
Rectangle rectangle = new Rectangle(100, 100, 20, 50);
// découpage d'une zones de l'image (prend juste une copie en mémoire)
Image zone1 = tk.createImage(new FilteredImageSource(img.getSource(),
                    new CropImageFilter(rectangle)));


------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
mardi 22 janvier 2008 à 13:00:55 | Re : création d'une zone cliquable

ldumont

Génial! merci, je vais essayer d'adapter ça à mon image et à mon programme mais ça devrait le faire.
Merci merci !!!
mardi 22 janvier 2008 à 13:04:29 | Re : création d'une zone cliquable

KenZara

    Chapeau Twinuts ^^

1 2

Cette discussion est classée dans : java, image, création, zone, cliquable


Répondre à ce message

Sujets en rapport avec ce message

slection avec la souris d'une zone dans l'image avec java [ par khila ] je besoin dans mon pfe d'implémenter implimenter une methode avec java qui me permet de selectionner une zone d'une image et afficher la matrice de pi insérer une image zone cliquable :'( [ par marwamarwita ] bonjour tout le monde je suis une débutante en java je voulais insérer une image dans un frame avec des zones cliquables je suis entrain d'utiliser JMF - prise image webcam [ par MBoughaba ] Bonjour, mon API consiste à prendre des image de ma webcam. mon api marche très bien quand cela est fait en passant par un jButton et un actionListen Comment lire une image en java pixel par pixel [ par imfaith ] Bonjour tout le monde ; j'ai un probléme avec la lecture des images avec java ,je veux lire une image pixel par pixel . J'ai pas trouvé le code pour traitement d'image en java a l'aide d'un interface graphique [ par ghaouar ] Salut, SVP aider moi je besoin d'une méthode qui permet de : - zoomer / retailler une image . - changer le niveau de gris d'une image. - rend Applet java ne se lance pas [ par marchombre ] Bonjour, je suis actuellement en stage et je dois créer un applet java permettant aux utilisateurs de la page web de pouvoir faire une impression écra mouvement d'un jlabel [ par lamia88 ] bonjours, jai crée un jlable nommé label2,et je veut modifier ca place,jai utilisée setbounds mais sa ne fonctionne pas. qulqun peut maider et merci d chargement d'une image [ par freddy000 ] bonsoir je suis débutant en java et j'essaye de me "former" un peu , après la consultation de quelques tutoriaux , j'arrive a taper le code suivant [c afficher une image lors d'un clic sur Jbutton [ par sancha2010 ] j'ai écris un programme qui a pour objectif d'afficher une image lors d'un clic sur une Boutton mais ça marche pas je ne sais pas pour quoi ?vous pouv comment affiche un image a partie de la basse en java [ par moknihayfa ] bonjour , je utilise un basse de maysql dans cette basse on a table produit(id_produit,couleur,categorie , description , path(qui contien chemain de


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,373 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales