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

 Java Discussion :

Probleme avec une image et un JPanel


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Par défaut Probleme avec une image et un JPanel
    Bonjour,
    J'ai un probleme pour afficher l'image que j'ai mise dans un JPanel.
    J'ai creer des jpanel dans lesquelles j'aimerai mettre un ou plusieurs composants.
    J'ai mis dans le jpanel north mon image, mais celle ci ne s'affiche pas correctement quoi que je fasse :/.
    Si quelqu'un a une idée ca serait génial
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
     
     
    package clientmsn;
     
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.GridBagLayout;
     
    import java.awt.FlowLayout;
    import java.awt.GridBagConstraints;
    import java.awt.Insets;
    import java.awt.event.ActionEvent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import javax.swing.ImageIcon;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JTextField;
     
    public class Acceuil extends JFrame
    {
        private JButton bouton;
        private JButton bouton2;
        private JLabel label;
        private JTextField loginField;
        private JTextField passwordField;
     
    	public Acceuil()
            {
    		super();
    		build();//On initialise notre fenêtre
    	}
     
    	private void build(){
    		setTitle("Client msn CoRed"); //On donne un titre à l'application
    		setSize(850,700); //On donne une taille à notre fenêtre
    		setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
    		setResizable(false); //On interdit la redimensionnement de la fenêtre
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix
                    this.setContentPane(buildContentPane());
            }
    	//...
     
    	private JPanel buildContentPane()
            {
                //Menu
                MenuAction menuAction = new MenuAction();
                JMenuBar menuBar = new JMenuBar();
                JMenu menu1 = new JMenu("Fichier");
     
                JMenuItem menu11 = new JMenuItem("menu1");
                menu11.addActionListener(menuAction.menu1);
                menu1.add(menu11);
     
                JMenuItem menu12 = new JMenuItem("menu2");
                menu12.addActionListener(menuAction.menu2);
                menu1.add(menu12);
     
                menuBar.add(menu1);
     
                JMenu menu2 = new JMenu("?");
                JMenuItem aPropos = new JMenuItem("A propos");
                aPropos.addActionListener(menuAction.menu3);
                menu2.add(aPropos);
                menuBar.add(menu2);
     
                JMenuItem menu21 = new JMenuItem("menu4");
                menu21.addActionListener(menuAction.menu4);
                menu2.add(menu21);
                menuBar.add(menu2);
                setJMenuBar(menuBar);
                //FIN MENU
     
     
                JPanel panelPrincipal = new JPanel();
                JPanel panelNorth= new JPanel();
                JPanel panelCenter=new JPanel();
                JPanel panelSouth=new JPanel();
     
                JPanel panFondEcran = new TestImagePanel(new ImageIcon("images2.jpg").getImage());
     
                panelPrincipal.setLayout(new BorderLayout());
                panelNorth.setLayout(new BorderLayout());
     
     
                Logo logo=new Logo();
                //panelNorth.setLayout(new BorderLayout());
                panelNorth.add(panFondEcran,BorderLayout.CENTER);
     
                panelPrincipal.add(panFondEcran, BorderLayout.NORTH);
     
    		return panelPrincipal;
    	}
     
     
            class BoutonListener implements ActionListener
            {
                public void actionPerformed(ActionEvent e)
                {
                    label.setText("Résultat : Pas encore calculé");
     
                }
            }
            public JTextField getField1(){
    		return loginField;
    	}
     
    	public JTextField getField2(){
    		return passwordField;
    	}
     
    }
    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
    package clientmsn;
     
    import java.awt.*;
    import javax.swing.ImageIcon;
    import javax.swing.JPanel;
     
    /**
     *
     * @author d080178
     */
    class TestImagePanel extends JPanel {
     
    	private static final long serialVersionUID = 1L;
    	private Image img;
     
    	public TestImagePanel(String img) {
    		this(new ImageIcon(img).getImage());
    	}
     
    	public TestImagePanel(Image img) {
    		this.img = img;
    	}
     
    	public void paintComponent(Graphics g) {
    		g.drawImage(img, 0, 0, this);
    	}
    }
    Merci d'avance pour l'aide

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ne s'affiche pas correctement ? Sans plus d'explication, ça ne veut rien dire.
    Mais je me lance quand même dans une possible solution : il manque une indication de taille à ton JPanel.
    Dans ta classe "TestImagePanel", ajoute la surcharge suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @override
    public Dimension getPreferredSize()
    {
      return new Dimension( img.getWidth(), img.getHeight() );
    }
    Autre chose : il ne faut pas ajouter plusieurs fois un même component, sauf si tu es certain de ce que tu fais. Tu peux te retrouver avec des comportements vraiment bizarres.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Dans un premier temps, il faut être sûr que ton image est bien localisée là où il faut.
    Dans un deuxième temps, il faut donner une taille préférée à ton panel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public TestImagePanel(Image img) {
    		this.img = img;
    		this.setPreferredSize(new Dimension(img.getWidth(null), img
    				.getHeight(null)));
    	}

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Par défaut
    Merci herve91 maitenant la taille de mon image s'affiche correctement.
    Pour etre plus clair, avant c'étais la taille de l'image qui n'étais pas correct ou qui ne s'affichait pas correctement
    Par contre pour dinobogan j'ai essaye ce que tu m'a donné mais ca m'affiche cette erreur-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    method getWidth in class java.awt.image cannot be applied to given types
    required: java.awt.image.imageobserver
    found: no arguments
    Je ne comprend pas bien ce que tu veus dire par:"il ne faut pas ajouter plusieurs fois un même component, sauf si tu es certain de ce que tu fais. Tu peux te retrouver avec des comportements vraiment bizarres." car Je n'est pas ajouter plusieurs fois le meme composant non?...

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par Zoners Voir le message
    Par contre pour dinobogan j'ai essaye ce que tu m'a donné mais ca m'affiche cette erreur-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    method getWidth in class java.awt.image cannot be applied to given types
    required: java.awt.image.imageobserver
    found: no arguments
    Normal, j'ai lu ton code en diagonale. Je pensais que tu utilisais un BufferedImage.
    Je te conseille d'utiliser ImageIO.read pour construire un BufferedImage à partir d'un fichier. Ensuite, tu peux accéder plus facilement aux différentes infos de l'image, notamment sa taille.
    Sinon, un JPanel est aussi un ImageObserver, donc tu ajoutes "this" en paramètre de getWidth et getHeight.

    L'avantage de la surcharge de la méthode getPreferredSize est qu'elle s'adapte à la taille de l'image au runtime. Par contre, si ton image ne change pas durant l'exécution, inutile de surcharger la méthode. Un setPreferredSize fera l'affaire (comme expliqué par herve91).

    Je ne comprend pas bien ce que tu veus dire par:"il ne faut pas ajouter plusieurs fois un même component, sauf si tu es certain de ce que tu fais. Tu peux te retrouver avec des comportements vraiment bizarres." car Je n'est pas ajouter plusieurs fois le meme composant non?...
    Tu as ajouté l'objet panFondEcran dans deux panel différents.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Par défaut
    Merci pour l'aide apportée J'ai resolu mon probleme grace a vous deux .
    Merci pour la precision dinobogan effectivement je rajoutais panFondEcran dans deux panels .
    Tous est rectifié a un prochaine

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

Discussions similaires

  1. [MySQL] probleme avec une fonction qui retaille mes images
    Par mademoizel dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 01/02/2011, 21h26
  2. Probleme avec une image dans un jar
    Par tirisus dans le forum JWS
    Réponses: 0
    Dernier message: 16/10/2009, 14h26
  3. Réponses: 1
    Dernier message: 03/07/2007, 16h05
  4. au secour probleme avec une requete...
    Par soufiane59 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/09/2003, 10h28
  5. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14

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