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 :

Insertion d'image cliquable dans un JPanel


Sujet :

Interfaces Graphiques en Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Points : 39
    Points
    39
    Par défaut Insertion d'image cliquable dans un JPanel
    Bonjour à tous!

    Je bosse sur mon code, et je me heurte à un problème qui me paraissait pourtant simple...
    Pour vous donner une idée de mon projet, imaginer que je code quelque chose qui ressemble à une écran de distributeur de banque. J'ai une classe qui extends JPanel qui représente l'écran et je dois insérer sur les cotés de ce JPanel les boutons métalliques (ce n'est pas un DAB, mais l'idée est à peu près la même).
    J'ai donc un fichier bouton.png qui représente l'allure d'un bouton.
    J'avais en tête de créer une classe qui extends JComponent (sur laquelle je pourrai donc ajouter ensuite un eventListener), et de l'ajouter à l'endroit où j'ai besoin 'un bouton...
    Voici la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.JComponent;
     
     
    public class Bouton extends JComponent{
    	Image image;
     
    	public void Bouton(){
    		try {
    			this.image = ImageIO.read(this.getClass().getResourceAsStream("/images/bouton.png"));
    		} catch (IOException e) {
                this.image = null;
                System.out.println("Fichier invalide");
    		}
    		this.setSize(70,70);	
    		this.setVisible(true);
    	}
     
    	public void paintComonent(Graphics g){
    		g.drawImage(this.image, 0, 0, this);
    	}
     
    }
    Mais quand je tente de l'ajouter via par exemple (dans la classe de mon JPanel) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     		Bouton bouton = new Bouton();
    		bouton.setLocation(693,20);
    		this.add(bouton);
    Rien ne s'affiche...
    Sauriez vous pourquoi?

    Merci en tout cas!

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 977
    Points
    7 977
    Par défaut
    Et pourquoi ne pas utiliser ce qui existe, a savoir un JButton ?

    Sinon peut etre parce que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void paintComonent(Graphics g){
    		g.drawImage(this.image, 0, 0, this);
    	}
    --> corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void paintComponent(Graphics g){
    		g.drawImage(this.image, 0, 0, this);
    	}
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Points : 39
    Points
    39
    Par défaut
    Tout d'abord, merci beaucoup de ta réponse.

    Je n'utilise pas de JButton, parce que mes boutons doivent avoir un aspect bien particulier (s'il y a un moyen de les personnaliser à ce point, je serais ravi de le connaitre!). Voici mon interface :


    Pour l'instant toute la partie de gauche fait partie de la même classe.
    J'aurais aimé placé le cadre dans une classe à part, avec chaque bouton qui serait cliquable indépendamment (vu le nombre, spy les coordonnées du click serait laborieux, et pas très propre).

    C'est pourquoi j'ai créé, pour essayé, la classe bouton, donné précédemment, et la classe Fenetre que voici (le but étant de dessiner le JComponent Bouton en (20,20) sur le JPanel contenu dans ma fenetre ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    import java.awt.Color;
    import java.awt.Dimension;
     
    import javax.swing.*;
     
     
    public class fenetre {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		JFrame fen = new JFrame();
    		fen.setBackground(Color.blue);
            fen.setLocationRelativeTo(null);
            fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            fen.getContentPane().setPreferredSize(new Dimension(400,600));
     
    		JPanel pan = new JPanel();
    		pan.setSize(400,600);
    		pan.setBackground(Color.green);
     
    		Bouton bouton1 = new Bouton();
    		bouton1.setLocation(20, 20);
     
     
    		fen.getContentPane().setSize(400,600);
    		fen.getContentPane().setLayout(null);
     
    		fen.getContentPane().add(pan);
    		pan.setLocation(0,0);
    		pan.add(bouton1);
    		fen.pack();
     
     
    		fen.setVisible(true);
    		fen.setResizable(false);
    	}
     
    }
    Meme en ayant modifié ma bête erreur de toute à l'heure, rien ne s'affiche...

    Alors, toute aide est la bienvenue... si vous savez comment modifier un JButton pour obtenir cette apparence, ou comment je pourrais créer une classe de composant qui pourrait représenter chacun de ces boutons.

    Merci en tout cas!

  4. #4
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 156
    Points
    156
    Par défaut
    A mon avis, si tu veux faire quelque chose comme cela, il faut aussi que du définisses un ButtonUI (cf javwx.swing.plaf...)

    Au lieu d'étendre de JComponent, tu devrais plutôt étendre de JPanel.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/09/2011, 11h59
  2. Comment creer des images cliquables dans un canvas?
    Par morchea dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 23/11/2009, 11h54
  3. Insertion d'image dynamique dans un PDF
    Par vg33 dans le forum Autres composants
    Réponses: 5
    Dernier message: 27/10/2008, 10h08
  4. Affichage d'une image (BLOB) dans un JPanel
    Par Vips dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 24/03/2008, 15h38
  5. vba excel : insertion d image gif dans feuille excel
    Par chamus dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/01/2007, 13h16

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