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 :

JLayeredPane


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 73
    Par défaut JLayeredPane
    bonsoir,

    Je suis entrain de construire une interface graphique via un JLayeredPane.
    J'arrive a reproduire comme dans les bouqins un exemple affichant les différentes couches.
    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
     
    import java.awt.*;
     
    import javax.swing.*;
    import java.awt.event.*;
     
    public class principale  extends JApplet{
     
     
     
    	public void init()
    	{
    		 JLayeredPane jlayeredpane = new JLayeredPane();
    		 JLabel labels[];
     
    		setContentPane(jlayeredpane);
    		jlayeredpane.setLayout(null);
     
    		labels = new JLabel[6];
     
    		Menu men= new Menu();
    		JMenuBar menb = new JMenuBar();
     		menb.add(men.menu);
     		setJMenuBar(menb);
     
    		labels[0] = new JLabel("Find the shortest way");
     
    		jlayeredpane.setLayer(labels[0], JLayeredPane.FRAME_CONTENT_LAYER.intValue());
    		jlayeredpane.add(labels[0]);
     
    		labels[1] = new JLabel("Hello");
    		jlayeredpane.setLayer(labels[1], JLayeredPane.DEFAULT_LAYER.intValue());
    		jlayeredpane.add(labels[1]);
     
     
    		for(int loop_index=0; loop_index <2; loop_index++)
    		{
    			labels[loop_index].setBounds(40 * loop_index, 40 * loop_index, 150, 60);
    			labels[loop_index].setOpaque(true);
    			labels[loop_index].setHorizontalAlignment(SwingConstants.CENTER);
    		}
     
    	}
    }
    Maintenant, je souhaiterais améliorer un peu le bazar. Je voudrais que mon Frame_Layer contient dans sa partie droite une image et dans sa partie supérieur un titre. Je pensais pour cela créer une classe s'occupant de créer tout cela.

    Mon problème est le suivant: quel code utiliser pour afficher le contenu de ma classe dans le frame_layer ?
    Autrement dit, comment dois je faire pour que le contenu de ma classe apparait dans la couche de fond.
    Imaginons que ma classe s'appelle Frame. Dans la classe principale, je mettrai un truc du genre:
    Frame = new Frame();

    et ensuite comment mettre cela dans le Frame_Layer ??


    Merci beaucoup pour votre aide

    Micka

  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
    Tu te crée un JPanel, tu mets ce que tu veux dedans et tu fais monLayer.add(monPanel).

    Je vois pas le problème...

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 73
    Par défaut jlayeredpane
    Bonsoir,

    Merci pour ta réponse. en fait le problème est que je suis débutant en Java et que je n'y connais pas grand chose.

    J'ai créé une classe Frame contenant un JPanel.
    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
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JPanel;
     
    class Frame extends JPanel 
    {
    	Frame()
    	{
    		setBackground(Color.white);
    	}
     
    	public void paintComponent (Graphics g)
    	{
    		super.paintComponent(g);
    		g.drawString("blablablablavlavla", 0, 20);
     
    	}
    }
    Malheureusement, il n'y a que le menu qui s'affiche dans l'applet.
    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
     
    import java.awt.*;
     
    import javax.swing.*;
    import java.awt.event.*;
     
    public class principale  extends JApplet{
     
     
     
    	public void init()
    	{
    		 JLayeredPane jlayeredpane = new JLayeredPane(); // definition du layerpane
     
     
    		setContentPane(jlayeredpane); //definition du conteneur comme un layer pane
    		jlayeredpane.setLayout(null);
     
     
     
    		// affichage du menu
    		Menu men= new Menu();
    		JMenuBar menb = new JMenuBar();
     		menb.add(men.menu);
     		menb.add(men.menu2);
     		setJMenuBar(menb);
     		// fin de l'affichage du menu
     
     		//affichage de la couche frame_layer
     		Frame fr = new Frame(); //appel de la classe Frame
     
    		jlayeredpane.add(fr);
     
     
     
    	}
    }
    Quelq'un aurait il la gentillesse de m'expliquer comment faire?


    Merci pour votre aide

    Micka

  4. #4
    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
    Si tu regardes la classe JApplet dans la doc de sun, tu vas t'appercevoir qu'elle possède un champ JRootPane. En regardant cette classe (JRootPane) tu peus aussi voir la hiérarchie des objets le composant. Jetes un coup d'oeuil à ça, je t'attends...

    ...

    Si tu as lus la doc tu devrais comprendre que la JApplet contient un JRootPane qui contient entre autres un JLayeredPane qui lui contient un contentPane.

    Or dans ton code tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JLayeredPane jlayeredpane = new JLayeredPane(); // definition du layerpane    
          setContentPane(jlayeredpane); //definition du conteneur comme un layer pane
    ce qui a pour effet de changer le contentPane du JLayeredPane pour un autre JLayeredPane. Je te rappelle qu'un JLayeredPane contient un panel pour la barre de menu !

    Réfléchis à ça et si tu as encore des problèmes je (nous) te répondrons.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 73
    Par défaut layeredpane
    Salut,

    Merci pour ton aide. J'ai été voir la doc. si je comprends bien, je dois alors utiliser quelque chose comme ci dessous?
    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
     
    public class Frame {
     
        private static void createAndShowGUI() {
            //Make sure we have nice window decorations.
            JFrame.setDefaultLookAndFeelDecorated(true);
     
            //Create and set up the window.
            JFrame frame = new JFrame("Find the shortest way");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            //Create the menu bar.  Make it have a cyan background.
            JMenuBar cyanMenuBar = new JMenuBar();
            cyanMenuBar.setOpaque(true);
            cyanMenuBar.setBackground(Color.cyan);
            cyanMenuBar.setPreferredSize(new Dimension(200, 20));
     
            //Create the menu item
            JMenuItem menuitem1 =  new JMenuItem("Compute");
            JMenuItem menuitem2 = new JMenuItem("Exit");
            JMenuItem menuitem3 = new JMenuItem("Help");
            JMenuItem menuitem4 = new JMenuItem("About");
     
            //Create the menubar elements
            JMenu menu = new JMenu("File");
            JMenu menu2 = new JMenu("Help");
     
     
            //add menuelements to the menubar
            menu.add(menuitem1);
            menu.add(menuitem2);
            menu2.add(menuitem3);
            menu2.add(menuitem4);
            cyanMenuBar.add(menu);
            cyanMenuBar.add(menu2);
     
     
            //Create a label to put in the content pane.
            JLabel yellowLabel = new JLabel("Find the shortest way between 2 cities");
            yellowLabel.setOpaque(true);
            yellowLabel.setBackground(Color.white);
            yellowLabel.setPreferredSize(new Dimension(200, 180));
     
            //Set the menu bar and add the label to the content pane.
            frame.setJMenuBar(cyanMenuBar);
            frame.getContentPane().add(yellowLabel, BorderLayout.CENTER);
     
            //Display the window.
            frame.pack();
            frame.setVisible(true);
        }
     
        public static void main(String[] args) {
            //Schedule a job for the event-dispatching thread:
            //creating and showing this application's GUI.
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }
    Est cela ou n'ai je toujours rien compris?


    Merci pour l'aide


    Micka

  6. #6
    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
    En plein ça !

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 73
    Par défaut ayered pane
    salut,


    Il y quand meme un truc que je ne comprend pas. si je veux ajouter un bouton sur mon frame, comment dois je faire?
    si je fais frame.add(but); toute la frame est recouverte par le bouton. Mon je voudrais que mon frame soit fait d'un label et d'un bouton


    Merci pour l'aide

    Micka

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 73
    Par défaut layeredpane
    Re,

    Ok le problème de comment régler la taille des différents éléments est réglé. J'utilise borderlayout, gridlayout et tout devrait fonctionner.

    Imaginons maintenant que j'affiche dans mon contentpane une image. Lorsque l'utilisateur clic sur un bouton, cela doit ecrire hello sur l'image.
    Pour cela, j'utilise le glasspane !?
    Imaginons que mon label est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JLabel text1 = new JLabel("Hello");
    comment dois je faire pour indiquer que cela doit etre mis dans le glass pane??


    Merci

  9. #9
    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 Re: layeredpane
    Citation Envoyé par micknic
    Re,

    Ok le problème de comment régler la taille des différents éléments est réglé. J'utilise borderlayout, gridlayout et tout devrait fonctionner.

    Imaginons maintenant que j'affiche dans mon contentpane une image. Lorsque l'utilisateur clic sur un bouton, cela doit ecrire hello sur l'image.
    Pour cela, j'utilise le glasspane !?
    Imaginons que mon label est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JLabel text1 = new JLabel("Hello");
    comment dois je faire pour indiquer que cela doit etre mis dans le glass pane??


    Merci
    Noooon! Pas le glassPane !

    Le glassPane est comme une couche par dessus les autres panes du JFrame. Ne mets rien dedans avant de savoir comment t'en servir (filtrer les clics etc).

    Tu as le contentPane qui devrait être la racine pour tes autres panels. Rien ne t'empêche d'ajouter d'autres JPanel au contentPane qui est un JComponent ou de remplacer celui-ci par un autre JPanel (qui hérite de JComponent).

    Par exemple, tu pourrais te faire une classe qui hérite de JPanel dans laquelle tu place ton code pour charger ton image (en surchargeant la méthode paintComponent(Graphics g)). Il y a des exemples un peu partout pour ça dans la FAQ et dans les messages précédents.

Discussions similaires

  1. JLayeredPane gere t il la transparence
    Par Ecosmose dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 09/03/2007, 21h16
  2. JLayeredPane modifier profondeur d'un élément
    Par superpigeon dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 14/01/2007, 16h32
  3. JLayeredPane et JDesktop qui se recouvre
    Par trax44 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 06/06/2006, 21h56
  4. JLayeredPane et bouton
    Par horkets dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/06/2006, 12h09
  5. [JLayeredPane] problème d'affichage
    Par alexandra_ape dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 27/10/2004, 14h18

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