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

Agents de placement/Fenêtres Java Discussion :

JFrame ayant pour fond une Image (centrée ou en mosaïque)


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut JFrame ayant pour fond une Image (centrée ou en mosaïque)
    Bonjour,
    je trouve ces classes dans les codes sources java de ce site, j'aimerai m'inspirer a fin de créer une gui original avec une image de fond, et des buttons, textfield, et autres,
    le seul problem est que si j'ajoute un button il n'est pas du tout visible. J'importe la classe dans jbuilder et la fenetre s'ouvre bien avec l'image du papillon mais si j'ajoute un jbutton ou un jTextfield il ne sont pas visibles?!
    peut l'auteur, ou quelqu'un d'autre m'aider a resoudre ce probleme?
    merci d'avance
    voici le code
    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
     
    package image;
     
    /**
     * <p>Titre : </p>
     *
     * <p>Description : </p>
     *
     * <p>Copyright : Copyright (c) 2005</p>
     *
     * <p>Société : </p>
     *
     * @author non attribuable
     * @version 1.0
     */
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
     
    public class JPanelImageBg extends JComponent
    {
            private int mode;
            private TexturePaint texture;
            private BufferedImage bufferedImage;
     
            public static final int CENTRE = 0;
            public static final int TEXTURE = 1;
     
            JPanelImageBg( String fileName, int mode )
            {	this.mode = mode;
                    this.bufferedImage = this.toBufferedImage(Toolkit.getDefaultToolkit().getImage(fileName));
                    this.texture = new TexturePaint(bufferedImage,new Rectangle(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight()));
            }
     
            public void paintComponent(Graphics g)
            {	switch( mode )
                    {	case TEXTURE :
                                    Graphics2D g2d = (Graphics2D)g;
                                    g2d.setPaint(texture);
                                    g2d.fillRect(0, 0, getWidth(), getHeight() );
                                    break;
                            case CENTRE :
                                    g.setColor(this.getBackground());
                                    g.fillRect(0,0,getWidth(), getHeight() );
                                    g.drawImage(bufferedImage,(getWidth()-bufferedImage.getWidth())/2,(getHeight()-bufferedImage.getHeight())/2,null);
                                    break;
                            default :
                                    super.paintComponents(g);
                    }
            }
     
     
            private BufferedImage toBufferedImage(Image image)
            {	image = new ImageIcon(image).getImage();
     
                    BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
                    Graphics g = bufferedImage.createGraphics();
     
                    g.setColor(Color.white);
                    g.fillRect(0, 0, image.getWidth(null),
                    image.getHeight(null));
                    g.drawImage(image, 0, 0, null);
                    g.dispose();
                    return bufferedImage;
            }
     
    }



    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
     
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.*;
    import javax.swing.*;
    import com.borland.jbcl.layout.XYLayout;
    import com.borland.jbcl.layout.*;
     
    /**
     * <p>Titre : </p>
     *
     * <p>Description : </p>
     *
     * <p>Copyright : Copyright (c) 2005</p>
     *
     * <p>Société : </p>
     *
     * @author non attribuable
     * @version 1.0
     */
    public class Cadre1 extends JFrame {
        JPanel contentPane;
        XYLayout xYLayout1 = new XYLayout();
        JPanel jPanel1 = new JPanel();
        XYLayout xYLayout2 = new XYLayout();
        JTextField jTextField1 = new JTextField();// ajout jtextfield
        JButton jButton1 = new JButton(); //ajout button
        JRadioButton jRadioButton1 = new JRadioButton();//ajout autre button
        public Cadre1() {
            try {
                setDefaultCloseOperation(EXIT_ON_CLOSE);
                jbInit();
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }
     
        /**
         * Initialisation du composant.
         *
         * @throws java.lang.Exception
         */
        private void jbInit() throws Exception {
            contentPane = (JPanel) getContentPane();
            contentPane.setLayout(xYLayout1);
            setSize(new Dimension(500, 500));
          this.setContentPane(new JPanelImageBg("butterfly.jpg",0));
     
            setTitle("Titre du cadre");
            jPanel1=(JPanel) getContentPane();
            jPanel1.setBorder(BorderFactory.createRaisedBevelBorder());
            jPanel1.setLayout(xYLayout2);
            jTextField1.setText("jTextField1");
            jButton1.setText("jButton1");
            jRadioButton1.setText("jRadioButton1");
            contentPane.add(jPanel1, new XYConstraints(84, 112, 273, 230));
            jPanel1.add(jTextField1, new XYConstraints(27, 49, 209, 31));
            jPanel1.add(jButton1, new XYConstraints(26, 148, 74, 29));
            jPanel1.add(jRadioButton1, new XYConstraints(178, 149, 44, 28));
        }
    }

  2. #2
    Membre éprouvé Avatar de dr00w
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 116
    Par défaut
    Ajoute l'appel à super.paintComponent(g) après ton switch.

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Et fait setOpaque(false) dans le constructeur pour éviter que la couleur de fond de ton bouton ne soit peinte par dessus ton image ou ta texture.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut
    j'essayé mais cela ne va toujours pas..

    j'imagine que celui ci est le constructeur?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      JPanelImageBg( String fileName, int mode )
            {	this.mode = mode;
                    this.bufferedImage = this.toBufferedImage(Toolkit.getDefaultToolkit().getImage(fileName));
                    this.texture = new TexturePaint(bufferedImage,new Rectangle(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight()));
                    [b]setOpaque(false);[/b]
            }
    le switch a dejà un super.paintcomponents(g). je ne sais pas la difference si un super.paintcomponent(g) est la meme chose un super.paintcomponents(g); j'ai ajouté un super.paintcomponent(g) apres l'accolade qui fermait le switch..
    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
     
     public void paintComponent(Graphics g)
            {	switch( mode )
                    {	case TEXTURE :
                                    Graphics2D g2d = (Graphics2D)g;
                                    g2d.setPaint(texture);
                                    g2d.fillRect(0, 0, getWidth(), getHeight() );
                                    break;
                            case CENTRE :
                                    g.setColor(this.getBackground());
                                    g.fillRect(0,0,getWidth(), getHeight() );
                                    g.drawImage(bufferedImage,(getWidth()-bufferedImage.getWidth())/2,(getHeight()-bufferedImage.getHeight())/2,null);
                                    break;
                            default :
                                    super.paintComponents(g);
                    }
                    super.paintComponent(g);
            }
    en fin si j'ai bien compris les instructions, c'est cela que vous m'avez recommande de faire?
    j'ai remarque une autre chose, une fois je execute pour voir si cela fonctionne, tous les buttons et autres elements que j'ai mis dans le jpanel perdent leur proprietes, si je met par exemple un texte au button il s'efface, si j'ajoute une bordure au jpanel tel que raisedBlevel, il disparait aussi..
    merci d'avance
    Mario

  5. #5
    Membre éprouvé Avatar de dr00w
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 116
    Par défaut
    le switch a dejà un super.paintcomponents(g). je ne sais pas la difference si un super.paintcomponent(g) est la meme chose un super.paintcomponents(g); j'ai ajouté un super.paintcomponent(g) apres l'accolade qui fermait le switch..
    Enlève ton appel à super.paintComponents(g) dans ton switch. Elle appelle paintComponent(g) sur TOUTE la hiérarchie des objets contenu dans ton panel.

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut
    j'ai fait tout ce que vous m'avez sugere mais toujours rien.. j'essaye de lire ailleurs mais pas de resultats; il semble que ce n'est pas possible d'avoir une image de fond et autres élements,..
    merci beaucoup.
    mario

  7. #7
    Membre éprouvé Avatar de dr00w
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 116
    Par défaut
    Regarde ce post.

    et modifie le constructeur de la classe MonCanvas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
            imageFond = loadImage(this.getClass().getResource("image.png"));
            //ajoute cette ligne pour afficher un bouton
            this.add(new JButton("Ceci est un bouton"));

  8. #8
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    je sais pas si ca va t'aider mais voila une methode qui marche pour avoir une image en fond d'une JFrame. A toi de voir et de l'adapter.
    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
     
    import javax.swing.*;
    import java.awt.*;
     
    class VueImage{
           private static final String TITRE = "Image en fond d'une JFrame";
           private JFrame jframe;
     
           VueImage(){
           jframe= new JFrame(TITRE);
           jframe.setLayout( new BorderLayout());
           jframe.add(new ImageIns(), BorderLayout.CENTER);
           jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           jframe.pack();
           jframe.setResizable(false);
           jframe.setVisible(true);
           }
     
           class ImageIns extends JComponent{
                  private static final String CHEMIN_IMG = /* @ de l'image sur ton PC, entre guillemet car c'est un String */;
                  private Image image;
                  private int wImage,hImage;
     
                  private void setImage(){ image = new ImageIcon(CHEMIN_IMG).getImage();}
     
                  ImageIns() {
                  setImage(); 
                  wImage = image.getWidth(jframe);
                  hImage = image.getHeight(jframe);
                  setPreferredSize( new Dimension(wImage,hImage));}
     
                  protected void paintComponent(Graphics g){
                  g.drawImage(image,0,0,wImage,hImage,jframe);}
           }       
    }

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut
    merci, tout est le bienvenu, mais mon plus grand souci est que quand j'ajoute un button, ce sois visible au dessus de l'image.
    un autre aspect est comme intégrer la classe dans jbuilder.
    je vais essayer ta classe.. merci bcp.
    mario

  10. #10
    Membre éprouvé Avatar de dr00w
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 116
    Par défaut
    Citation Envoyé par mariogarcia
    merci, tout est le bienvenu, mais mon plus grand souci est que quand j'ajoute un button, ce sois visible au dessus de l'image.
    mario
    Qu'est-ce qui marche pas avec l'exemple que j'ai fourni dans l'autre thread ?

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut
    oui, cela fonctionne, si j'utilise gel par exemple comme IDE; des que je le met sur jbuilder, cela ne fonctionne pas, soit parfois il affiche l'image et tous les autres élements ne sont plus la, ou soit il n'affiche rien,
    d'ailleur, je n'avais pas eu le temps de te remercier pour l'autre thread, j'espere pouvoir mener mon projet a bout grâce à toi,
    merci encore

  12. #12
    Membre éprouvé Avatar de dr00w
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 116
    Par défaut
    Tu dois utiliser des objets propriétaires Borland. Si tu t'en tiens à du pure Java, ça devrait marcher n'importe où.

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut
    apres beaucoup d'essais, j'ai reussi, grace a la classe de l'autre thread d'integrer dans jbuilder et d'afficher l'image de fond, telle que je le souhaitais et ce sans devoir recommencer l'interface graphique de zero.

    je vous remercie pour votre aide..

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

Discussions similaires

  1. JFrame ayant pour fond une Image (centrée ou en mosaïque)
    Par Clement Cunin dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 08/03/2011, 19h18
  2. [CS5] Problème pour charger une image en fond
    Par Poulki dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 18/11/2010, 10h11
  3. Réponses: 13
    Dernier message: 23/12/2004, 18h01
  4. Mkisofs - problème pour créer une image
    Par tomnie dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 04/08/2004, 11h44

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