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

 Java Discussion :

Un débutant et les jFrames


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut Un débutant et les jFrames
    Bonjour à tous,

    Tout d'abord je tiens à m'excuser de mon ignorance Javaesque.
    Je me lance dans ce petit langage de programmation et j'avance à tâtons comme on dit .
    Voila ma question peut paraitre toute bête mais bon je me lance :
    Je cherche à créer une application avec une partie graphique. J'ai ma fenetre principale avec en haut de cette fenetre un menu avec des sous items. Mon idée est que lorsque je cliquerais sur un de ces sous items, les differents controls qui se trouvaient sur ma fenetre principale soient remplacés par les controls correspondant au sous item que j'aurai selectionné.
    Dois je donc toujours rester sur la même fenêtre en mettant en invisible les controls précédant, et en mettant visible les nouveau controls; ou alors je dois tout simplement créer une nouvelle instance de Jframe avec ces nouveaux controls tout en rendant invisible la Jframe correspondante à ma fenêtre principale ?

    Désolé si mes explications sont un peu confuse et la question un peu bêta mais bon..

    Merci d'avance à tous.

  2. #2
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    Bonjour minnemo et bienvenue

    en fait j'avais le meme probleme sauf que moi j'ai des boutons à gauche de la fanetre et un grand panneau dans l'espace restant ,et lorsque je cilque il faut afficher des controles correspondant ,

    donc la première methode que j'ai utilisé est de fair un repaint() au panneau
    mais ça provoque d'autre problème vous pouvez les voir en testant ça.

    donc la solution que j'ai utilisé et de faire à chaque bouton (item) un panel
    ce panel je l'ajoute au panneau principale et je fait panel.setVisible(true);

    et lorsque je change le bouton je fait pour panel setVisible(false)
    et comme ça pour les autres en restant dans une seule fenetre bien sur.

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    Merci pour ta réponse.
    J'avais pensé à cette méthode mais je me disais que : si tu as plusieurs sous items correspondant pour chacun à un panel. Si jamais tu en ouvres un (donc que tu le rend visible), comment savoir quel panel ne plus rendre visible. Car avec cette méthode, un tant soit peu que tu ais beaucoup de Panel en stock comment savoir quel panel mettre à false ?

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Par défaut
    Je crois que c'est plus simple en utilisant un cardLayout.
    Tu y ajoutes autant de panel que tu veux et ensuite tu gère lequel s'affiche au moment ou tu le demande (appui sur un bouton en général, mais y'a pas de raison que ça marche pas avec un menu)

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    si vous avez un nombre fini d'itemes et je pense que c'est le cas, pas de problème pour faire ça vous faite stVisible(false) pour les panel que vous voulez pas afficher

  6. #6
    Membre averti
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    Quel est la méthode la plus commune et la plus "propre" (quoique je me dit au final si ton programme marche peu importe la méthode mais bon autant faire un truc un peu pro :p) :

    - Est ce que à chaque clic sur un sous item je dois creer une nouvelle JFrame (ce qui ferai au final beaucoup de JFrame) en rendant invisible la JFrame précédente ?
    - Est ce que je dois ne garder qu'un JFrame et associé à chaque sous items un JPanel (le panel correspondant au sous item deviendrai donc visible et tout les autres panel invisible, ce qui entrainerais a chaque fois des lignes de codes redondants) ?
    - Est ce que je dois utiliser un cardLayout ?

    Remarque mieux vaux avoir l'embarra du choix que pas de choix du tout

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    +1 pour le cardlayout, il est destiné à çà, tant que tes composant sont limité. Si t'as 50 sous menus chacun correspondant à un groupe de 30 composant, çà risque de commencer à poser des problèmes de perfs et il faudra peut etre envisager de détruires les composants non visibles :p

    Sinon, cardlayout à tous les coups ^^

    Le new JFrame, fait pas çà, elle aura ses propriété propre et sur, par exemple du dualscreen, l'utilisateur pourrais voir la JFrame se balader d'un écran à l'autre, pas top ^^

  8. #8
    Membre averti
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    Merci pour ta réponse.
    Je tente donc les CardLayout mais j'avou avoir un peu de mal à les utilisé.
    J'utilise la palette graphique de Netbeans pour coder, ce qui n'est peut être pas très recommandé pour les CardLayout.
    J'ai associé un de mes sous menu a un panel mis en CardLayout et je tombe sur cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.awt.BorderLayout cannot be cast to java.awt.CardLayout
    Quelqu'un peut m'expliquer ce que cette erreur signifie ?
    N'hésitez pas si vous désirez plus d'info

    je met quand même l'erreur en entier
    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
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.awt.BorderLayout cannot be cast to java.awt.CardLayout
            at testdesfenetres.NewJFrame1.jMenuItem1ActionPerformed(NewJFrame1.java:104)
            at testdesfenetres.NewJFrame1.access$000(NewJFrame1.java:13)
            at testdesfenetres.NewJFrame1$1.actionPerformed(NewJFrame1.java:87)
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
            at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
            at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1220)
            at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1261)
            at java.awt.Component.processMouseEvent(Component.java:6041)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
            at java.awt.Component.processEvent(Component.java:5806)
            at java.awt.Container.processEvent(Container.java:2058)
            at java.awt.Component.dispatchEventImpl(Component.java:4413)
            at java.awt.Container.dispatchEventImpl(Container.java:2116)
            at java.awt.Component.dispatchEvent(Component.java:4243)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
            at java.awt.Container.dispatchEventImpl(Container.java:2102)
            at java.awt.Window.dispatchEventImpl(Window.java:2440)
            at java.awt.Component.dispatchEvent(Component.java:4243)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

    Et je joint le code. Sachant que je me suis aidé de l'assistant graphique Netbeans qui produit je pense (je ne suis qu'un simple novice) un code un peu dégeulasse lol

    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
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    import java.awt.*;
    /**
     *
     * @author  Jacques
     */
    public class NewJFrame1 extends javax.swing.JFrame {
     
        /** Creates new form NewJFrame1 */
        public NewJFrame1() {
            initComponents();
        }
     
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
     
            jPanel1 = new javax.swing.JPanel();
            jLabel1 = new javax.swing.JLabel();
            jPanel2 = new javax.swing.JPanel();
            jLabel2 = new javax.swing.JLabel();
            jMenuBar1 = new javax.swing.JMenuBar();
            jMenu1 = new javax.swing.JMenu();
            jMenuItem1 = new javax.swing.JMenuItem();
            jMenu2 = new javax.swing.JMenu();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            getContentPane().setLayout(new java.awt.CardLayout(50, 50));
     
            jLabel1.setText("PSG");
     
            javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
            jPanel1.setLayout(jPanel1Layout);
            jPanel1Layout.setHorizontalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addGap(98, 98, 98)
                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(74, Short.MAX_VALUE))
            );
            jPanel1Layout.setVerticalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addGap(74, 74, 74)
                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(71, Short.MAX_VALUE))
            );
     
            getContentPane().add(jPanel1, "card2");
     
            jLabel2.setText("LYON");
     
            javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
            jPanel2.setLayout(jPanel2Layout);
            jPanel2Layout.setHorizontalGroup(
                jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addGap(113, 113, 113)
                    .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(91, Short.MAX_VALUE))
            );
            jPanel2Layout.setVerticalGroup(
                jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addGap(71, 71, 71)
                    .addComponent(jLabel2)
                    .addContainerGap(94, Short.MAX_VALUE))
            );
     
            getContentPane().add(jPanel2, "card3");
     
            jMenu1.setText("File");
     
            jMenuItem1.setText("Item");
            jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jMenuItem1ActionPerformed(evt);
                }
            });
            jMenu1.add(jMenuItem1);
     
            jMenuBar1.add(jMenu1);
     
            jMenu2.setText("Edit");
            jMenuBar1.add(jMenu2);
     
            setJMenuBar(jMenuBar1);
     
            pack();
        }// </editor-fold>                        
     
        private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
     
            ((CardLayout)getLayout()).show(this.jPanel2,"card3");
     
            // TODO add your handling code here:
        }                                          
     
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new NewJFrame1().setVisible(true);
                }
            });
        }
     
        // Variables declaration - do not modify                     
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JMenu jMenu1;
        private javax.swing.JMenu jMenu2;
        private javax.swing.JMenuBar jMenuBar1;
        private javax.swing.JMenuItem jMenuItem1;
        private javax.swing.JPanel jPanel1;
        private javax.swing.JPanel jPanel2;
        // End of variables declaration                   
     
    }

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    tu as défini le cardlayout sur le contentPane() mais tu tente de le récupérer sur la frame, c'est pas la meme chose. Change ton getLayout() en getContentPane().getLayout()

    Le code de l'ide n'est pas des plus propres, surtout dans le nommage des variables, mais au moins c'est rapide à faire ^^

  10. #10
    Membre averti
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    Ca marche !

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

Discussions similaires

  1. [Débutant] Récupérer les paramètres d'une routine
    Par nifty dans le forum Assembleur
    Réponses: 5
    Dernier message: 18/04/2005, 15h35
  2. [Débutant(e)]Les servlets et Eclipse
    Par Ethylene dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 16/02/2005, 16h08
  3. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 11h51
  4. Pb de débutant sur les pointeurs!!!
    Par benji17c dans le forum C
    Réponses: 6
    Dernier message: 30/09/2003, 18h50
  5. Un autre débutant ... désoler - Les mesh
    Par oxor3 dans le forum DirectX
    Réponses: 4
    Dernier message: 15/08/2003, 19h41

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