IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

[MouseEntered] pb de localisation souris pour faire apparaitre une image


Sujet :

Interfaces Graphiques en Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 29
    Points
    29
    Par défaut [MouseEntered] pb de localisation souris pour faire apparaitre une image
    Bonjour,

    je voudrais faire apparaitre une image lorsque je passe sur un bouton. Mai j'ai un probleme de localisation.

    voici un de mes ecouteurs d'entrée de la souris dans un composant:

    public void mouseEntered(MouseEvent e){
    int x = e.getX();
    int y = e.getY();

    if(estDansLeBouton(SupervisionLeHavre,x,y)){
    main.ecranDroite.removeAll();
    ImageFond image = new ImageFond("CODAH.GIF");
    main.ecranDroite.add(image.afficher());
    main.ecran.revalidate();
    }
    ....
    }
    et voici le traitement de la position:

    private boolean estDansLeBouton(JButton j, int x, int y){
    float Xjmin = j.getAlignmentX();
    float Xjmax = Xjmin + j.getWidth();
    float Yjmax = j.getAlignmentY();
    float Yjmin = Yjmax - j.getHeight();

    return( x >= Xjmin && x <= Xjmax && y <= Yjmax && y >= Yjmin);
    }
    mon probleme est que l'image n'est pas la bonne qui doit apparaitre, ou bien, l'image associée a un bouton n'apparait pas.

    auriez vous une idée ?

    merci.

  2. #2
    Membre actif Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Points : 291
    Points
    291
    Par défaut
    Slt,

    Je crois que le focus listener (focus gained) pour les boutons te permet de savoir si la souris passe dessus ou pas. Pourquoi ne pas les utiliser plutot que de tout coder toi meme.

    Pour le reste montre la suite du code, c'est de quel type ecranDroite ?? si c'est un JLabel tu n'as qua faire un setIcon(), si c'est un jpanel tu recupere son composant graphique et tu utilises la methode drawImage().

    Il me manque certains elements de ton code pour te repondre plus precisement.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    exact, j'ai oublié de signifié a quoi correspondais ecranDroite. Il s'agit d'un JPanel.

    voici pour le code: (les parties en rouges sont celles importantes qui posent probleme (et les parties qui les utilisent))

    le main

    public class main {

    public static JTextArea valeur = new JTextArea();
    public static Graphics g;
    public static Image codah;
    public static JPanel ecran;
    public static JPanel menu;
    public static JPanel icone;
    public static JPanel menuAccueil;
    public static JPanel boutons;
    public static JPanel boutonsAccueil;
    public static JPanel panneauSupervision;
    public static JPanel ecranDroite;
    public static JFrame test;

    /**
    * @param args
    */
    public static void main(String[] args) {

    test = new JFrame();

    ecran = new JPanel();
    ecran.setLayout(new BorderLayout());
    ecran.setPreferredSize(new Dimension(1024,768));

    //----------------------------------------
    // creation de la barre de menu
    menu = new JPanel();
    menu.setLayout(new BorderLayout());
    menu.setPreferredSize(new Dimension(341,256));

    //--------------------------------
    // insertion de l'icone de la codah
    icone = new JPanel();
    icone.setLayout(new BorderLayout());
    icone.setLayout(new FlowLayout(FlowLayout.CENTER));
    icone.setPreferredSize(new Dimension(341,256));

    ImageFond image = new ImageFond("CODAH.GIF");
    icone.add(image.afficher());

    // icone créée
    // -------------------------------
    // creation des boutons
    boutons = new JPanel();
    boutons.setLayout(new BorderLayout());
    boutons.setPreferredSize(new Dimension(341,512));

    //----------------------------
    //creation des boutons d'accueil
    boutonsAccueil = new JPanel();
    boutonsAccueil.setLayout(new BorderLayout());
    boutonsAccueil.setLayout(new FlowLayout(FlowLayout.CENTER));
    boutonsAccueil.setPreferredSize(new Dimension(113,512));

    barreAccueil barreAccueil = new barreAccueil();

    boutonsAccueil.add(barreAccueil.activer(),BorderLayout.WEST);

    //boutons d'accueil créés
    //----------------------------
    //creation du panneau accueillant la supervision

    panneauSupervision = new JPanel();
    panneauSupervision.setLayout(new BorderLayout());
    panneauSupervision.setPreferredSize(new Dimension(227,512));

    //panneau créé
    //----------------------------


    boutons.add(boutonsAccueil,BorderLayout.WEST);
    boutons.add(panneauSupervision,BorderLayout.EAST);

    // boutons créées
    //--------------------------------

    menu.add(icone,BorderLayout.NORTH);
    menu.add(boutons,BorderLayout.SOUTH);

    // barre de menu créée
    //------------------------------------------
    // creation du panneau secondaire
    ecranDroite = new JPanel();
    ecranDroite.setLayout(new BorderLayout());
    ecranDroite.setPreferredSize(new Dimension(683,768));

    // ecran de droite créé
    //------------------------------------------

    ecran.add(menu,BorderLayout.WEST);
    ecran.add(ecranDroite,BorderLayout.EAST);

    test.add(ecran);

    test.pack();

    test.setVisible(true);

    }
    }
    la classe barreAccueil qui créée le menu

    public class barreAccueil implements ActionListener{

    private static JMenuBar barreMenu;
    private JButton Supervision;
    private JButton IPDB;
    private JButton GLPI;
    private JButton reservation;
    private boolean ouvert = false;

    public barreAccueil(){

    barreMenu = new JMenuBar();
    barreMenu.setLayout(new GridLayout(0,1,10,5));

    Supervision = new JButton("Supervision");
    Supervision.addActionListener(this);
    Supervision.setActionCommand("Supervision");
    barreMenu.add(Supervision);

    IPDB = new JButton("IPDB");
    IPDB.addActionListener(this);
    IPDB.setActionCommand("IPDB");
    barreMenu.add(IPDB);

    GLPI = new JButton("GLPI");
    GLPI.addActionListener(this);
    GLPI.setActionCommand("GLPI");
    barreMenu.add(GLPI);

    reservation = new JButton("reservation");
    reservation.addActionListener(this);
    reservation.setActionCommand("reservation");
    barreMenu.add(reservation);
    }

    public JMenuBar activer(){
    return barreMenu;
    }

    public void actionPerformed(ActionEvent evt){

    if(evt.getActionCommand() == "Supervision"){
    if(!ouvert){
    main.panneauSupervision.removeAll();
    barreSupervision boutonsSupervision = new barreSupervision();
    main.panneauSupervision.add(boutonsSupervision.activer());
    main.ecran.revalidate();
    }
    else{
    main.panneauSupervision.removeAll();
    main.ecran.revalidate();
    }
    ouvert = !ouvert;
    }


    if(evt.getActionCommand() == "IPDB"){

    }

    if(evt.getActionCommand() == "GLPI"){

    }

    if(evt.getActionCommand() == "reservation"){

    }
    }
    }
    la classe barreSupervision qui fait apparaitre un menu "arborescent" du bouton Supervision de la classe barreAccueil:

    public class barreSupervision implements ActionListener,MouseListener{

    private static JMenuBar barreMenu;
    private JButton SupervisionLeHavre;
    private JButton SupervisionRadicatel;
    private JButton SupervisionYport;
    private JButton SupervisionAugustinNormand;
    private JButton SupervisionSaintLaurent;
    private JButton ZoneIndustrielle;
    private JButton BassinOrage;
    private JButton Sectorisation;
    private JButton Courbes;


    public barreSupervision(){

    barreMenu = new JMenuBar();
    barreMenu.setLayout(new GridLayout(0,1,10,5));

    SupervisionLeHavre = new JButton("SupervisionLeHavre");
    SupervisionLeHavre.addActionListener(this);
    SupervisionLeHavre.addMouseListener(this);
    SupervisionLeHavre.setActionCommand("SupervisionLeHavre");
    barreMenu.add(SupervisionLeHavre);

    SupervisionRadicatel = new JButton("SupervisionRadicatel");
    SupervisionRadicatel.addActionListener(this);
    SupervisionRadicatel.addMouseListener(this);
    SupervisionRadicatel.setActionCommand("SupervisionRadicatel");
    barreMenu.add(SupervisionRadicatel);

    SupervisionYport = new JButton("SupervisionYport");
    SupervisionYport.addActionListener(this);
    SupervisionYport.addMouseListener(this);
    SupervisionYport.setActionCommand("v");
    barreMenu.add(SupervisionYport);

    SupervisionAugustinNormand = new JButton("SupervisionAugustinNormand");
    SupervisionAugustinNormand.addActionListener(this);
    SupervisionAugustinNormand.addMouseListener(this);
    SupervisionAugustinNormand.setActionCommand("SupervisionAugustinNormand");
    barreMenu.add(SupervisionAugustinNormand);

    SupervisionSaintLaurent = new JButton("SupervisionSaintLaurent");
    SupervisionSaintLaurent.addActionListener(this);
    SupervisionSaintLaurent.addMouseListener(this);
    SupervisionSaintLaurent.setActionCommand("SupervisionSaintLaurent");
    barreMenu.add(SupervisionSaintLaurent);

    ZoneIndustrielle = new JButton("ZoneIndustrielle");
    ZoneIndustrielle.addActionListener(this);
    ZoneIndustrielle.addMouseListener(this);
    ZoneIndustrielle.setActionCommand("ZoneIndustrielle");
    barreMenu.add(ZoneIndustrielle);

    BassinOrage = new JButton("BassinOrage");
    BassinOrage.addActionListener(this);
    BassinOrage.addMouseListener(this);
    BassinOrage.setActionCommand("BassinOrage");
    barreMenu.add(BassinOrage);

    Sectorisation = new JButton("Sectorisation");
    Sectorisation.addActionListener(this);
    Sectorisation.addMouseListener(this);
    Sectorisation.setActionCommand("Sectorisation");
    barreMenu.add(Sectorisation);

    Courbes = new JButton("Courbes");
    Courbes.addActionListener(this);
    Courbes.addMouseListener(this);
    Courbes.setActionCommand("Courbes");
    barreMenu.add(Courbes);
    }

    public JMenuBar activer(){
    return barreMenu;
    }

    public void mouseClicked(MouseEvent e){}

    public void mousePressed(MouseEvent e){}

    public void mouseReleased(MouseEvent e){}

    public void mouseEntered(MouseEvent e){
    int x = e.getX();
    int y = e.getY();

    if(estDansLeBouton(SupervisionLeHavre,x,y)){
    main.ecranDroite.removeAll();
    ImageFond image = new ImageFond("CODAH.GIF");
    main.ecranDroite.add(image.afficher());
    main.ecran.revalidate();
    }


    if(estDansLeBouton(SupervisionRadicatel,x,y)){
    main.ecranDroite.removeAll();
    ImageFond image = new ImageFond("RADICATEL.GIF");
    main.ecranDroite.add(image.afficher());
    main.ecran.revalidate();
    }

    if(estDansLeBouton(SupervisionYport,x,y)){
    main.ecranDroite.removeAll();
    ImageFond image = new ImageFond("YPORT.GIF");
    main.ecranDroite.add(image.afficher());
    main.ecran.revalidate();

    }

    if(estDansLeBouton(SupervisionAugustinNormand,x,y)){
    main.ecranDroite.removeAll();
    ImageFond image = new ImageFond("CODAH.GIF");
    main.ecranDroite.add(image.afficher());
    main.ecran.revalidate();
    }

    if(estDansLeBouton(SupervisionSaintLaurent,x,y)){
    main.ecranDroite.removeAll();
    ImageFond image = new ImageFond("ST_LAURENT.GIF");
    main.ecranDroite.add(image.afficher());
    main.ecran.revalidate();
    }

    if(estDansLeBouton(ZoneIndustrielle,x,y)){
    main.ecranDroite.removeAll();
    ImageFond image = new ImageFond("CODAH.GIF");
    main.ecranDroite.add(image.afficher());
    main.ecran.revalidate();
    }

    if(estDansLeBouton(BassinOrage,x,y)){
    main.ecranDroite.removeAll();
    ImageFond image = new ImageFond("CODAH.GIF");
    main.ecranDroite.add(image.afficher());
    main.ecran.revalidate();
    }

    if(estDansLeBouton(Sectorisation,x,y)){
    main.ecranDroite.removeAll();
    ImageFond image = new ImageFond("CODAH.GIF");
    main.ecranDroite.add(image.afficher());
    main.ecran.revalidate();
    }

    if(estDansLeBouton(Courbes,x,y)){
    main.ecranDroite.removeAll();
    ImageFond image = new ImageFond("CODAH.GIF");
    main.ecranDroite.add(image.afficher());
    main.ecran.revalidate();
    }

    }

    public void mouseExited(MouseEvent e){}


    public void actionPerformed(ActionEvent evt){

    if(evt.getActionCommand() == "SupervisionLeHavre"){

    }

    if(evt.getActionCommand() == "SupervisionRadicatel"){

    }

    if(evt.getActionCommand() == "SupervisionYport"){

    }

    if(evt.getActionCommand() == "SupervisionAugustinNormand"){

    }

    if(evt.getActionCommand() == "SupervisionSaintLaurent"){

    }

    if(evt.getActionCommand() == "ZoneIndustrielle"){

    }

    if(evt.getActionCommand() == "BassinOrage"){

    }

    if(evt.getActionCommand() == "Sectorisation"){

    }

    if(evt.getActionCommand() == "Courbes"){

    }
    }

    public boolean estDansLeBouton(JButton j, int x, int y){
    float Xjmin = j.getAlignmentX();
    float Xjmax = Xjmin + j.getWidth();
    float Yjmax = j.getAlignmentY();
    float Yjmin = Yjmax - j.getHeight();

    return( x >= Xjmin && x <= Xjmax && y <= Yjmax && y >= Yjmin);
    }

    }

    merci...

  4. #4
    Membre actif Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Points : 291
    Points
    291
    Par défaut
    Il y a un truc que je ne comprends pas. Pourquoi tu utilises la methode estDansLeBouton si tu utilise un mouselistener avec mouseentered. si il tu arrive dans cette methode c'est que normalement il est sur le bouton (je n'ai pas lu a fond tout ton code donc j'ai peut etre sauter quelques petits trucs).
    Et ton type ImageFond c'est une classe que tu crees ?? Elle fait quoi la methode affiche ?

  5. #5
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Moi à ta place, j'aurai fait un tooltip, tu peux afficher ce que tu veux dedans... (Images comprises...) Ca évite de galérer avec les mouseentered...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    mais, le tooltip correspondrait a quoi ?

    pcq, en passant sur le bouton, tu affiches une image dans un JPanel independant...

    dc, je ne comprend pas le role du tooltip...

    pour repondre a fumiste, la classe Imagefond me créée une image a partir d'un fichier GIF. et lorsque j'appelle la methode "afficher()", elle me renvoie un Container contenant l'image.

    ensuite, comme ma classe implemente MouseEntered, il faut que je calcule les coordonnées du bouton afin de savoir si la souris est bien dedans. Donc, je suis obligé d'utilisé ma methode "estDansLeBouton"... est ce que je me trompe quelque part ?

    sinon, ce code, je l'ai modifié avec ta precedente reponse, fumiste, en utilisant le FocusListener, et la, j'implemente FocusGained. mais cette methode ne m'effectue rien.

    voici comment je l'ai implementé:

    Création du bouton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SupervisionLeHavre = new JButton("SupervisionLeHavre");
    		SupervisionLeHavre.addActionListener(this);
    		SupervisionLeHavre.addFocusListener(this);
    		leHavre = new FocusEvent(SupervisionLeHavre,1,true,null);   (Je ne sais pas quoi mettre comme argument a la place du "1", car ce n'est pas tres explicite dans l'API java.)
    		SupervisionLeHavre.setActionCommand("SupervisionLeHavre");
    		barreMenu.add(SupervisionLeHavre);
    Implementation de FocusGained (interieurDroite correspond a un JPanel):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void focusGained(FocusEvent e){
    		if(e == leHavre){ // si la souris passe sur le bouton du Havre
    			main.interieurDroite.removeAll();
    			ImageFond image = new ImageFond("CODAH.GIF",main.interieurDroite.getPreferredSize()); // on affiche le logo de la CODAH
    			main.interieurDroite.add(image.afficher());
    			main.ecran.revalidate();
    			main.applet.add(main.ecran);
    		}

  7. #7
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    J'avais mal saisi ton problème... Je vais étudier la chose de plus près...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    merci...

    donc, maintenant, il faut prendre en compte le bout de code que je vous ai posté dans mon dernier message. J'ai décidé de ne pas utiliser MouseEntered, mais plutot FocusEvent...

    enfin, si vous me trouvez une solution avec MouseEntered, je suis quand meme preneur...

  9. #9
    Membre actif Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Points : 291
    Points
    291
    Par défaut
    Soit je comprends mal ce que tu explique soit c'est l'inverse donc je reessai.
    Tu as un bouton SupervisionLeHavre, et quand ta souris passe dessus tu veux que ca fasse une commande. Ce que je t'explique c'est que si tu mets un evenement de type mouseentered sur ton bouton, tu n'as plus besoin de tes fonctions de test estdansLeBouton.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SupervisionLeHavre.addMouseListener(new java.awt.event.MouseAdapter() {
                    public void mouseEntered(java.awt.event.MouseEvent e) {
                        // Tu fais ta commande d'affichage de ton .gif
                    }
                });

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    d'accord, j'essaye ca...
    merci...

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    le probleme est resolu. Je te remercie...

    ta technique etait la bonne, et je n'ai plus aucun probleme...

    bien joué. Encore merci...

  12. #12
    Membre actif Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Points : 291
    Points
    291
    Par défaut
    De rien. Bon courage pour la suite.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    bah, en fait, il m'en faut...

    j'ai un gros probleme pour integrer mon applet dans le navigateur...

    j'ai un pb d'image.... mais je vais creer un nouveau post...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PPT-2003] Animation pour faire apparaitre une photo
    Par Alfred23 dans le forum Powerpoint
    Réponses: 2
    Dernier message: 23/08/2010, 12h01
  2. Un boutton pour faire apparaitre une applet
    Par zouna dans le forum Applets
    Réponses: 2
    Dernier message: 04/02/2008, 14h26
  3. Faire apparaitre une image.
    Par darkdeeper dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/10/2007, 09h17
  4. Controle souris pour faire apparaitre une fenêtre
    Par argon dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 27/07/2007, 11h58
  5. comment faire apparaitre une image puis une autre si quête réalisée ?
    Par oceanne dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/05/2007, 21h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo