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 :

Affichage de panel dans un panel


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Affichage de panel dans un panel
    Bien le bonjour,
    J'ai un problème ma fois fort banal, mais j'essaye depuis un moment de faire afficher une classe héritée de JPanel dans le panel d'une classe héritée d'un Jframe sans grand succès (enfin aucun pour être exact).

    En gros j'ai ma fenêtre principale extends Jframe qui contient Trois parties dont un Jpanel au centre. A côté de ca j'ai plusieur Jpanel (modules a afficher) que je souhaiterai afficher dans le JPanel au dessus. Mais rien y fait, le néant !

    J'utilise Netbeans 6.5, il créer des Layouts, mais j'ai pas saisie comme marchait tout ce bastringue. Si quelqu'âme charitable pouvait me briefer rapidement sur l'ordre des choses je lui en serait gré !

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Bonjour, hormis te dire que pour ajouter un JPanel dans un JPanel, il suffit de faire tonPanel1.add(tonPanel2), nous ne pouvons pas t'aider si tu ne nous montres pas ton code.

    As-tu appelé la méthode revalidate() pour mettre à jour l'interface?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bien vrai :-).
    Voilà ce que j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            tmxedit.views.ProjectPanel ppn = new tmxedit.views.ProjectPanel();
            this.mainPanel.add(ppn);
            ppn.setVisible(true);
            this.mainPanel.revalidate();
    MainPanel et (comme son nom l'indique) le panel principal de ma JFrame.
    Bout de code mit après le initComponents() - créé par netbeans - du constructeur.
    Et rien.
    Bon au début j'avais validate() à la place de revalidate().

  4. #4
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Quel est le layout de mainPanel? y-a-t-il d'autres composants à l'intérieur?
    Ce code est appelé avant ou après l'affichage de la fenêtre?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Le layout du mainPanel est un GroupLayout.
    Il est vide au départ. Mon code arrive en dernier lors de la création de mon objet FrameView.
    Tout est géré par Netbeans dans une fonction initComponents() ou il instancie les objet swing, créer les layouts, place les objets et les dimensionnes.
    Je bute un peu sur ça façon de gérer les layouts (code à rallonge).
    le initComponents concernant le mainPanel :
    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
     
    mainPanel = new javax.swing.JPanel();
     
            mainPanel.setName("mainPanel"); // NOI18N
     
            javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
            mainPanel.setLayout(mainPanelLayout);
            mainPanelLayout.setHorizontalGroup(
                mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 400, Short.MAX_VALUE)
            );
            mainPanelLayout.setVerticalGroup(
                mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 249, Short.MAX_VALUE)
            );
            setComponent(mainPanel);
    Le constructeur de ma FrameView:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public TMXeditView(SingleFrameApplication app) {
            super(app);
     
            initComponents();
            initMain(); // la fonction ou j'ajoute mon JPanel
        }
    ps: Petite précision qui a son importance, mon objet extends de JPAnel contient un Jbutton et un Jlabel avec border, donc on devrait voir quelque chose ;-).
    Dernière modification par Invité ; 09/12/2008 à 11h18.

  6. #6
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    Pour faire ça, je verrais assez un layered pane qui peut contenir plusieurs panels et les afficher à la demande (un à la fois) :
    dans cet exemple, chaque panel contient une image, chaque bouton provoque la mise en premier plan de l'un ou de l'autre...

    avec NetBeans :
    avoir un jLayeredPane sur la frame, y ajouter deux panels, dans properties Layer "PALETTE_LAYER"
    voir la doc de jLayeredPane

    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
     
     private void jButton1MouseReleased(java.awt.event.MouseEvent evt) {                                       
            jLayeredPane1.moveToFront(jPanel1);
        }                                      
     
        private void jButton2MouseReleased(java.awt.event.MouseEvent evt) {                                       
              jLayeredPane1.moveToFront(jPanel2);
        }                                      
     
      private void ab() {                                                                             // mise en place
         ImageIcon icone =  new ImageIcon("./lib/fleur_animee.gif"); 
         JLabel image = new JLabel(icone); 
         image.setSize(jPanel1.getWidth(),jPanel1.getHeight());
         jPanel1.add(image);
         jPanel1.repaint();
         ImageIcon icone2 =  new ImageIcon("./lib/bebe2.jpg"); 
         JLabel image2 = new JLabel(icone2); 
         image2.setSize(jPanel2.getWidth(),jPanel2.getHeight());
         jPanel2.add(image2);
         jPanel2.repaint(); 
         jLayeredPane1.moveToFront(jPanel2);
      }
    bonne chance !

  7. #7
    Invité
    Invité(e)
    Par défaut
    Merci pour votre aide, mais je me pose une question au vue du peu de réponses concernant directement l'utilisation de jpanel dans jpanel:

    Pour créer une application de type desktop, de qu'elle façon gérez vous l'affichage des différentes parties de la dite appli ?
    Je m'explique, prenons une application standard tel Outlook, comment gérer les affichages du calendrier puis du mailer, puis des notes,.... selon les clics de l'utilisateur.

    Jusqu'ici j'ai toujours travaillé sur des appli Web, mais je dois convertir une de mes applis en Java pour utilisation client. Donc j'ai des vues et des classes php que j'ai réécrite en java, mais je ne sais pas comment gérer leur affichage.
    J'étais donc partit sur de "l'incude" de jpanel dans une jpanel principale. En gros je pars avec une logique 'model view controller'.

    Est ce que je fais fausse route ou bien ? Enfin je veux plutôt dire est-ce que je vais m'en sortir ;-) ?

  8. #8
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    C'est plus ou moins la bonne route, je pense que tu devrais utiliser un CardLayout, si j'ai bien compris.

    Tu affectes un cardlayout à un JPanel qui contiendra tout tes autres JPanel, ensuite tu ajoutes tout tes panels affichables à ce JPanel, puis il suffit de sélectionner lequel afficher via la méthode show de CardLayout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    JPanel cards;
    final static String BUTTONPANEL = "Card with JButtons";
    final static String TEXTPANEL = "Card with JTextField";
     
    JPanel card1 = new JPanel();
    JPanel card2 = new JPanel();
    cards = new JPanel(new CardLayout());
    cards.add(card1, BUTTONPANEL);
    cards.add(card2, TEXTPANEL);
     
    // dans l'événement gérant l'afichage
    CardLayout cl = (CardLayout)(cards.getLayout());
    cl.show(cards, BUTTONPANEL);

  9. #9
    Invité
    Invité(e)
    Par défaut
    Grand Merci, ca fonctionne !

    Pour info sur netBeans en mode design c'est clic droit sur le JPanel->set layout->Card Layout.

    Bon allez il me reste encore pas mal de truc à coder, à mon prochain problème ;-) !

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

Discussions similaires

  1. Problème taille de cellule d'un panel dans un panel
    Par zuzuu dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 10/09/2008, 12h39
  2. Problème taille d'un panel dans un panel dans un panel.
    Par zuzuu dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 05/08/2008, 11h19
  3. Probleme d'affichage de Message dans un Panel
    Par vorhax dans le forum Windows Forms
    Réponses: 1
    Dernier message: 14/04/2007, 22h13
  4. [VB.NET] image d'un bouton dans un panel dans une fentre MDI
    Par smedini dans le forum Windows Forms
    Réponses: 6
    Dernier message: 02/02/2006, 19h15
  5. [AWT]Changement de panel dans un panel
    Par guipom dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 27/12/2004, 16h57

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