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 :

Image de fond sur une JFrame et dans une JToolBar


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre averti Avatar de FredPsy
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Décembre 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 285
    Points : 342
    Points
    342
    Par défaut Image de fond sur une JFrame et dans une JToolBar
    Bonsoir,
    Peut - on, a l'instar d'un JFrame, mettre une image de fond sur un JToolBar ?

    J'ai suivi le fil des discussions concernant ce sujet mais je n'arrive pas à l'appliquer.

    J'explique : J'ai une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Gui extends JFrame{}
    qui appelle une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public BToolBar extends JToolBar{}
    J'ai fais plusieurs tests avec ce que j'ai trouvé.
    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
     
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Toolkit;
     
    import javax.swing.JPanel;
    import javax.swing.JFrame;
     
    public class Dudule extends JFrame
        {
     
            private static final long serialVersionUID = 1L;
     
            private JPanel jContentPane = null;
            private Image image;
     
            /**
             * This is the default constructor
             */
            public Dudule()
                {
                    super();
                    initialize();
                }
     
            /**
             * This method initializes this
             * 
             * @return void
             */
            private void initialize()
                {
                    this.setSize(300, 200);
                    this.setContentPane(getJContentPane());
                    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    this.setTitle("JFrame");
                    this.setVisible(true);
                }
            public void paint(Graphics g) {
                image=Toolkit.getDefaultToolkit().getImage("b.jpg") ;
                g.drawImage(image, 0, 0, this);
            }
     
            /**
             * This method initializes jContentPane
             * 
             * @return javax.swing.JPanel
             */
            private JPanel getJContentPane()
                {
                    if (jContentPane == null)
                        {
                            jContentPane = new JPanel();
                            jContentPane.setLayout(new BorderLayout());
                        }
                    return jContentPane;
                }
     
        }
    Cela fonctionne très bien. Cependant, pour le besoin de mon prog, je passe la JFrame en paramêtre à d'autres classes. Dans le code suivant, je change juste le this en arpe (objet JFrame).
    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
     
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Toolkit;
     
    import javax.swing.JPanel;
    import javax.swing.JFrame;
     
    public class Dudule extends JFrame
        {
     
            private static final long serialVersionUID = 1L;
     
            private JFrame arpe;
            private JPanel jContentPane = null;
            private Image image;
     
            /**
             * This is the default constructor
             */
            public Dudule()
                {
                    initialize();
                }
     
            /**
             * This method initializes arpe
             * 
             * @return void
             */
            private void initialize()
                {
                    arpe = new JFrame();
                    arpe.setSize(300, 200);
                    arpe.setContentPane(getJContentPane());
                    arpe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    arpe.setTitle("JFrame");
                    arpe.setVisible(true);
                }
            public void paint(Graphics g) {
                image=Toolkit.getDefaultToolkit().getImage("b.jpg") ;
                g.drawImage(image, 0, 0, arpe);
            }
     
            /**
             * This method initializes jContentPane
             * 
             * @return javax.swing.JPanel
             */
            private JPanel getJContentPane()
                {
                    if (jContentPane == null)
                        {
                            jContentPane = new JPanel();
                            jContentPane.setLayout(new BorderLayout());
                        }
                    return jContentPane;
                }
     
        }
    Et là, oh miracles oh damnations, ça ne marche plus.

    Comment ce fait-ce ?

    Merci beaucoup d'avance.

    Bonne soirée
    "Dites moi ce dont vous avez besoin, je vous apprendrai à vous en passer".
    Et de grâce, je ne possède pas le plugin boule de cristal de firefox, alors soyez clair dans vos questions.

    Je lutte contre le language SMS.

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    arpe est une JFrame normale, pas une Dudule : il n'y a pas de redefinition de paint()... donc pas d'image. En plus je trouve la manip du transfert du content pane un poil lourdingue (mais peut-etre en as-tu reellement besoin qui sait).

    Au fait, pourquoi toute cette redefinition juste pour avoir une reference sur un JPanel ? (JPanel)getContentPane() ne suffit-il pas ? ou dans le pire des cas setContentPane(new JPanel()) dans le constructeur pour etre sur du bon type.

    Plutot que de redefinir une nouvelle JToolBar, as-tu essaye avec un setOpaque(false) ? Note que c'est juste une suggestion et que ca ne marche peut-etre pas.
    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

  3. #3
    Membre averti Avatar de FredPsy
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Décembre 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 285
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par bouye
    En plus je trouve la manip du transfert du content pane un poil lourdingue (mais peut-etre en as-tu reellement besoin qui sait).
    Effectivement, j'en ai besoin, simplement pour pouvoir centrer les différents JDialog par rapport à ma JFrame origine (arpe) a partir de classes de différents packages.


    Citation Envoyé par bouye
    Au fait, pourquoi toute cette redefinition juste pour avoir une reference sur un JPanel ? (JPanel)getContentPane() ne suffit-il pas ? ou dans le pire des cas setContentPane(new JPanel()) dans le constructeur pour etre sur du bon type.
    Je ne comprends pas ta façon de voir, argumentes s'il te plait.


    Citation Envoyé par bouye
    Plutot que de redefinir une nouvelle JToolBar, as-tu essaye avec un setOpaque(false) ? Note que c'est juste une suggestion et que ca ne marche peut-etre pas.
    Effectivement, la redéfinition est inutile. J'ai modifié mon code (ça devait être un test).

    Bonne journée
    "Dites moi ce dont vous avez besoin, je vous apprendrai à vous en passer".
    Et de grâce, je ne possède pas le plugin boule de cristal de firefox, alors soyez clair dans vos questions.

    Je lutte contre le language SMS.

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Citation Envoyé par FredPsy
    Effectivement, j'en ai besoin, simplement pour pouvoir centrer les différents JDialog par rapport à ma JFrame origine (arpe) a partir de classes de différents packages.
    J'ai resolu le probleme en me faisant une methode statique utilitaire qui remonte la hierarchie des composants graphiques (y compris les owners des differentes boites de dialogues lorsqu'il y en a plusieurs imbriquees les unes dans les autres) jusqu'au container racine. Evidement cela ne marche correctement que si les differents dialogue et fenetres sont correctement chaines entre eux. On peut utiliser SwingUtilities.getRoot(container).

    Je ne comprends pas ta façon de voir, argumentes s'il te plait.
    En fait je n'avais pas vu que getJContentPane() etait private (lu trop vite). Donc effectivement cela revient au meme.
    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

  5. #5
    Membre averti Avatar de FredPsy
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Décembre 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 285
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par bouye
    SwingUtilities.getRoot(container).
    Merci, je vais essayer ça. Je ne sais pas trop comment on l'utilise, mais je vais chercher.

    Bonne soirée.
    "Dites moi ce dont vous avez besoin, je vous apprendrai à vous en passer".
    Et de grâce, je ne possède pas le plugin boule de cristal de firefox, alors soyez clair dans vos questions.

    Je lutte contre le language SMS.

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    En fait quand tu as a ouvrir une boite de dialogue, plutot que de l'ouvrir directement, tu lance une methode utilitaire pour trouver la frame racine et centrer ton dialog dessus. Un peu comme ca :

    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
    package test;
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    /** Test class.
     * <p>Title: </p>
     *
     * <p>Description: </p>
     *
     * <p>Copyright: Copyright (c) 2006</p>
     *
     * <p>Company: </p>
     *
     * @author not attributable
     * @version 1.0
     */
    public class TestAncestor {
      /** Dialog ID generator.
       */
      private static int DIALOG_ID = 0;
     
      /** Creates a new instance.
       */
      public TestAncestor() {
      }
     
      /** Program entry point.
       * @param args Arguments from the command line.
       */
      public static void main(String ...args) {
        SwingUtilities.invokeLater(new Runnable() {
          /** {@inheritDoc}
           */
          public void run() {
            JFrame frame = new JFrame("Test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JButton button = new JButton("test");
            ActionListener listener = new ButtonActionListener();
            {
              button.addActionListener(listener);
              frame.setLayout(new BorderLayout());
              frame.add(button, BorderLayout.CENTER);
              frame.pack();
              frame.setVisible(true);
            }
          }
        });
      }
     
      /** Configure and show dialog when a button is clicked.
       */
      private static void configureAndShowDialog(JButton source) {
        System.out.println("Root : " + SwingUtilities.getRoot(source));
        System.out.println("JFrame : " + SwingUtilities.getAncestorOfClass(JFrame.class, source));
        System.out.println("JDialog : " + SwingUtilities.getAncestorOfClass(JDialog.class, source));
        System.out.println("Window : " + SwingUtilities.getWindowAncestor(source));
        System.out.println();
        Container container = SwingUtilities.getWindowAncestor(source);
        JDialog dialog = null;
        if (container instanceof Dialog) {
          dialog = new JDialog((Dialog) container, "test " + DIALOG_ID, true);
        }
        else {
          dialog = new JDialog((Frame) container, "test " + DIALOG_ID, true);
        }
        DIALOG_ID++;
        JButton button = new JButton("test");
        final ActionListener listener = new ButtonActionListener();
        button.addActionListener(listener);
        dialog.setLayout(new BorderLayout());
        dialog.add(button, BorderLayout.CENTER);
        dialog.pack();
        // Center on frame top parent.
        JFrame ancestor = (JFrame) SwingUtilities.getAncestorOfClass(JFrame.class, source);
        if (ancestor != null) {
          Point frameLocation = ancestor.getLocation();
          Dimension frameDimension = ancestor.getSize();
          int centerX = frameLocation.x + frameDimension.width / 2;
          int centerY = frameLocation.y + frameDimension.height / 2;
          /** @todo Verify we'ere correctly positionned onscreen. */
          dialog.setLocation(centerX - dialog.getWidth() / 2, centerY - dialog.getHeight() / 2);
        }
        // Make visible.
        dialog.setVisible(true);
      }
     
     
      /** Listener for GUI components.
       * <p>Title: </p>
       *
       * <p>Description: </p>
       *
       * <p>Copyright: Copyright (c) 2006</p>
       *
       * <p>Company: </p>
       *
       * @author not attributable
       * @version 1.0
       */
      private static class ButtonActionListener implements ActionListener {
        /** {@inheritDoc}
         */
        public void actionPerformed(ActionEvent event) {
          JButton source = (JButton) event.getSource();
          configureAndShowDialog(source);
        }
      }
    }
    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

  7. #7
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Est ce qu'on aurait pu aussi utiliser setLocationRelativeTo() pour centrer la JDialog par rapport à la JFrame ?

    http://java.developpez.com/faq/gui/?...ntrage_fenetre
    "Le calendrier, c'est la bureaucratie du temps." Quino

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Oui mais ce faisant il faudra verifier le fait que le resultat peut ne pas etre centre (si la fenetre parente sort de l'ecran - mais bon justement c'est un cas dans lequel ce genre de correction nous interresse) et voir egalement ce que ca donne quand par exemple la fenetre parente chevauche deux ecrans. J'avais pas teste cette methode (et puis comme l'API est vaste j'oublie toujours qu'elle existe ).

    Citation Envoyé par javadoc
    If the bottom of the component is offscreen, the window is placed to the side of the Component that is closest to the center of the screen. So if the Component is on the right part of the screen, the Window is placed to its left, and visa versa.
    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

  9. #9
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Ok ben en tout cas merci de tes précisions
    "Le calendrier, c'est la bureaucratie du temps." Quino

  10. #10
    Membre averti Avatar de FredPsy
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Décembre 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 285
    Points : 342
    Points
    342
    Par défaut
    Hello tout le monde,
    En fait, je passe ma JFrame principale en paramètre à chaque classe.
    Ce n'est peut être pas très beau, mais ça fonctionne bien.

    Merci bien, pour ces réponses.
    Il faut que je teste quand même le morceau de code fourni.
    "Dites moi ce dont vous avez besoin, je vous apprendrai à vous en passer".
    Et de grâce, je ne possède pas le plugin boule de cristal de firefox, alors soyez clair dans vos questions.

    Je lutte contre le language SMS.

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

Discussions similaires

  1. Récupérer des valeurs dans une JFrame à partir d'une classe
    Par stratocasters dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 26/06/2012, 15h15
  2. Réponses: 82
    Dernier message: 05/02/2011, 14h34
  3. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  4. Réponses: 2
    Dernier message: 08/11/2007, 10h54
  5. Réponses: 2
    Dernier message: 08/11/2007, 10h54

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