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

AWT/Swing Java Discussion :

[DEBUTANT][JPanel] Affichage d'une image en arriere plan


Sujet :

AWT/Swing Java

  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [DEBUTANT][JPanel] Affichage d'une image en arriere plan
    Salut,

    tout d'abord, merci à ceux qui s'intéresseront à mon problème.

    Je m'explique :
    Je voudrai afficher une image en arrière plan d'un JPanel.

    A ce JPanel, j'ai appliqué un GridBagLayout pour que le placement de mes boutons se fasse toujours bien en fonction de la taille de la fenetre (autrement dit, pour que mes boutons ne disparaissent pas si je réduis la taille de ma fenêtre).

    <code>
    .
    ...
    JPanel contentPane = (JPanel) this.getContentPane();
    GridBagLayout gridbag = new GridBagLayout();
    contentPane.setLayout(gridbag);
    ...
    .
    </code>

    Le problème est que je n'arrive pas à mettre une image en arrière plan...

    Ca fait déjà plusieurs jours que je traîne sur Internet pour essayer de résoudre mon probleme, mais je n'y arrive pas.

    En plus, je débute en Java...

    Si quelqu'un pouvait m'aider à résoudre ce problème...

    Merci d'avance.

    @ +

  2. #2
    iuz
    iuz est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Points : 110
    Points
    110
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        JPanel panelImage = new JPanel() {
          private Image image;
          public void paintComponent(Graphics g) {
            super.paintComponent(g);
     
            if (image == null)
              try {
                image = ImageIO.read(MaClasse.class.getResource("monImage"));
              }catch (Exception ex) {}
     
            if (image != null)
              g.drawImage(image, 0, 0, this);
          }
        };

  3. #3
    Membre confirmé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Points : 616
    Points
    616
    Par défaut
    n oublie pas:


  4. #4
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    En fait, je n'arrive pas à l'integrer à mon code car au moment ou je déclare mon GridBagLayout, l'image ne s'affiche plus.

    Je ne sais pas si elle est cachée par la grille, mais elle ne s'affiche pas.

    Quand je désactive la déclaration du GridBagLayout, l'image s'affiche bien en arriere plan...

    J'ai raté quelque chose??

    J'ai peut être mal intégré votre solution dans mon code...

    Merci d'avance.

  5. #5
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Toujours pas résolu ce probleme...


    Si quelqu'un pouvait me filer un petit coup de main, ca serait sympa


    Merci d'avance.

    @++

  6. #6
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    bon, un truc qui fonctionne chez moi avec le GridBagLayout . J'ai un composant JBackPanel
    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.Graphics;
    import java.awt.Graphics2D;
    import java.awt.geom.AffineTransform;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.JPanel;
     
    public class JBackPanel extends JPanel {
     
    	BufferedImage aBackgroundImage;
    	AffineTransform aZoomTransform;
     
    	public JBackPanel(){
    		super();
    		aZoomTransform=new AffineTransform();
    		try {
    			aBackgroundImage=ImageIO.read(new File("./monimage.jpg"));
    		} catch (IOException e) {
    			// TODO Bloc catch auto-généré
    			e.printStackTrace();
    		}
    		this.setOpaque(false);
    	}
     
    	@Override
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		aZoomTransform.setToIdentity();
    		aZoomTransform.scale(1.0,1.0);
     
    		Graphics2D g2d=(Graphics2D) g;
    		g2d.drawRenderedImage(aBackgroundImage,aZoomTransform);
     
    	}
     
    }
    que j'affiche ainsi :
    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
     
    public JMaFrame(String aNameString){
    			super(aNameString);
    			setSize(1024,768);
    			JBackPanel jc = new JBackPanel();
     
    			jc.setPreferredSize(new Dimension(800,600));
    		    this.getContentPane().add(jc); 
    		    jc.setLayout(new GridBagLayout());
    		    //ajout du bouton
    		    GridBagConstraints gbc = new GridBagConstraints();
     
    		    gbc.weightx = 1;
    		    gbc.weighty = 1;
     
    		    gbc.gridx = 0;
    		    gbc.gridwidth = 3;
    		    gbc.gridheight = 1;
    		    gbc.gridy = 0;
     
    		    gbc.fill = GridBagConstraints.NONE;
     
     
    		    anOKButton=new JButton("OK");
     
    		    jc.add( anOKButton, gbc);
     
    		    //ajout de la liste 
    		    gbc=new GridBagConstraints();
     
    		    gbc.weightx = 1;
    		    gbc.weighty = 1;
     
    		    gbc.gridx = 0;
    		    gbc.gridwidth = 1;
    		    gbc.gridheight = 3;
    		    gbc.gridy = 1;
     
    		    gbc.fill = GridBagConstraints.BOTH;
     
    		    aCapList=new JList(aCapFile);
    		    aCapList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    		    aCapList.setOpaque(false);
    		    aCapList.setCellRenderer(new Cellrender());
     
    		    //JScrollPane aScrollPane=new JScrollPane(aCapList);
    		    //aScrollPane.setOpaque(false);
    		    //aScrollPane.setBackground(new Color(0,0,0,0));
    		    //jc.add( aScrollPane, gbc);
    		    jc.add(aCapList, gbc);
     
    		    //ajout de la liste de cases à cocher
    		    gbc=new GridBagConstraints();
     
    		    gbc.weightx = 1;
    		    gbc.weighty = 1;
     
    		    gbc.gridx = 2;
    		    gbc.gridwidth = 1;
    		    gbc.gridheight = 1;
    		    gbc.gridy = 2;
     
    		    //gbc.fill = GridBagConstraints.HORIZONTAL;
     
     
    		    groupe = new ButtonGroup();
    		    bouton1 = new JRadioButton("Test 1");
    		    groupe.add(bouton1);
     
    		    bouton2 = new JRadioButton("Test 2");
    		    groupe.add(bouton2);
     
     
    		    unpanel=new JPanel(new BorderLayout());
     
    		    JLabel label=new JLabel("Test");
    		    unpanel.add(label,BorderLayout.NORTH);
    		    unpanel.add(bouton1,BorderLayout.CENTER);
    		    unpanel.add(bouton2,BorderLayout.SOUTH);
     
    		    label.setForeground(Color.red);
     
    		    bouton1.setOpaque(false);
    		    bouton1.setForeground(Color.RED);
    		    bouton1.setSelected(true);
     
    		    bouton2.setOpaque(false);
    		    bouton2.setForeground(Color.RED);
    		    unpanel.setOpaque(false);
     
    		    jc.add(unpanel,gbc);
     
    		    this.pack();
    		    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    			this.setVisible(true);
     
     
    		  }
    Bon, c'est du brut de pomme, il faut l'adapter, si j'ai le temps, je créerai un composant réutilisable, mais là, c'était pas l'objectif....
    Amuse toi bien !!

  7. #7
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Hey, ca marche nickel, merci.

    Voici ce que j'ai changé dans mon code pour que ca passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    contentPane = new JBackPanel();
    this.getContentPane().add(contentPane);
    GridBagLayout gridbag = new GridBagLayout();
    contentPane.setLayout(gridbag);
    Par contre, petite question pendant que je suis la, est-ce possible de l'étendre sur toute la fenetre?

    J'ai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /*  DANS LA CLASSE : JBackPanel - paintComponent
    this.texture = new TexturePaint(aBackgroundImage,new Rectangle(0, 0, aBackgroundImage.getWidth(), aBackgroundImage.getHeight())); 
    g2d.setPaint(texture);
    g2d.fillRect(0, 0, getWidth(), getHeight() );
    g2d.drawRenderedImage(aBackgroundImage,aZoomTransform);
    Ca ne fait que recopier mon image, or, moi je voudrai l'étendre.

    Merci pour l'aide...

  8. #8
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    est-ce possible de l'étendre sur toute la fenetre?
    qu'est ce que tu entends par là ?

  9. #9
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Ben de l'étirer en fait, que l'image soit étendu sur tout l'ecran.

    Comme sous windows, quand tu mets une image en arriere plan sur ton bureau.

    En fait, mon image fait 1024 * 768, moi je suis en resolution 1280 * 800, je voudrai que l'image s'étende et couvre mes 1280 * 800.

    Idem, je voudrai que si ma fenetre (redimensionnée par l'utilisateur par exemple) passe en 800 * 600, je voudrai que l'image soit redimensionnée en 800 * 600.


    Est-ce possible?

  10. #10
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		aZoomTransform.setToIdentity();
    		aZoomTransform.scale(1.0,1.0);
    C'est à ça que ça sert... , le scale permet d'appliquer une transformation d'échelle à ton image...
    Il suffit de trouver la (ou les : mais attention aux distortions) bonne valeur, genre largeurpanel/largeurimage et longueurpanel/longueurimage

  11. #11
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Ben j'avais essayé de jouer sur ces valeurs, mais en vain.

    Je vais essayer de mettre ca en place, redimensionnement de l'image de fond selon la taille de la fenêtre, et je posterai la solution si je trouve.

    M'enfin, si y'en a un qui trouve avant..., qu'il n'hésite pas.

    Merci pour les coups de main

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

Discussions similaires

  1. comment mettre une image en arriere-plan en JFrame ou JPanel
    Par fateh_mansori dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/05/2007, 21h42
  2. [Debutant] Probleme affichage d'une image
    Par iutcien dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 16/11/2006, 15h13
  3. [JPanel] Affichage d'une image et scrolling
    Par unknown4 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 15/09/2005, 00h09
  4. Centrage de texte avec une image en arriere plan
    Par MasterOfChakhaL dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 26/08/2005, 18h31
  5. [DEBUTANT][HTML] affichage d'une image dans une page
    Par nimport nawak dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 12/04/2005, 19h50

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