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 :

[ SWING ] Ajout d'element à un JFrame


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 [ SWING ] Ajout d'element à un JFrame
    Bonjour,

    J'essaye de développer un application de test Swing...

    J'ai crée une classe Main qui etend JFrame, une classe myMenu qui etend JMenuBar et une classe myJTP qui étend JTabbedPane.

    Dans la Main, j'ajoute mon menu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     setJMenuBar(new myMenu())
    Ce menu doit ajouter mon myJTP dans ma JFrame lors d'une action.

    Je voudrais savoir quel est la méthode la plus propre pour faire cela ?

    - J'avait pensé passer la JFrame à mon menu (new myMenu(this)) mais je ne trouve pas ça tres propre.
    - Je regade à crée une méthode addContent dans Main pour appeler cette méthode depuis n'importe quelle autre classe.. Mais je n'y arrive pas..
    Pour l'instant j'ai mis cette méthode en static mais je ne sais alors plus utiliser add() ..

  2. #2
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    pour le static c'est normal ca ne fait pas référence à une instance d'un objet quand c'est static (FAQ)

    ensuite pour rajouter ton JTabbedPane...

    Proposition:
    1.tu crées tous tes objets à l'initialisation (JFrame, JMenu, JTabbedPane...)
    2.tu les affiches quand il faut les afficher (toujours en passant par SwingUtilities.invokeLater() pour ne pas avoir de conflit de concurence)

  3. #3
    Invité
    Invité(e)
    Par défaut
    oui, ok mais comment faire pour que mon menu puisse 'accéder' à mon JTP afin de l'afficher ou non ?

  4. #4
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    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
     
    public class Fen extends JFrame{
     private JTabbedPane tbp = new JTabbedPane();
     private JMenuItem menuAjout = new JMenuItem();
     
     public Fen(){
      SwingUtilities.invokelater(new Runnable(){ 
         public void run(){
            initGui();
         }
        });
     }
     
     private void initGui(){
       JMenuBar bar = new JMenuBar();
       JMenu fichier = new JMenu("Fichier");
       fichier.add(menuAjout);
       bar.add(menu);
       menuAjout.addActionListener(new ActionListener(){
          void actionPerformed(ActionEvent e){
            tbp.setVisible(true); //affichage de ton JTabbedPane
          }
           //méthodes implémentées
      });
       this.setJMenuBar(menu);
    }
     
    }

  5. #5
    Invité
    Invité(e)
    Par défaut
    Oui ok, mais la les actionsListners sont placés dans ta méthode "principale".
    Ce ne serait pas plus clair de pouvoir les mettres directement dans la classe du menu ?

    Dans cette façon de faire, je n'arrive plus à fixer mon LookAndFeel..

  6. #6
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Ah ca c'est une question de goût... Moi j'ai toujours fait comme ca et dans tous les exemples, bouquins, cours que j'ai vu ca se faisait comme ca...

    Si tu fais dans la classe du menu tu devras lui passer la référence de ta frame alors à mon avis...

  7. #7
    Membre éprouvé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    Ouais tu lui passes en paramètre, mais comme le dit pollux sa méthode est la plus répandue (car la plus logique)

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ok, donc la méthode principale contient les actions.

    c'est vrai que dans un sens ... c'est plus logique.

    Mais pour mon lookandfeel je ne vois pas pq il ne le prend plus!
    j'ai essayé de le mettre dans initGui() ou dans Fen() mais ça ne marche plus!
    Pourtant Fen est mon constructeur et je l'avait placé dans le constructeur avant..

  9. #9
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Je te conseille d'ouvrir un nouveau topic pour ce sujet, mais sinon donne-nous ton code...

  10. #10
    Invité
    Invité(e)
    Par défaut
    J'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
             //Applique le look&feel system
            try {            
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (Exception ex) {
                ex.printStackTrace();
            }
    dans void main(String[] args)..
    juste avant d'instancier Fen...

  11. #11
    Invité
    Invité(e)
    Par défaut
    Dernière question :
    Est-ce que ça sert à quelque chose de créer une classe pour mon menu ?
    Etant donné que je vais rajouter les actionsListener dans ma classe Fen..

  12. #12
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    C'est typiquement le genre de trucs qui je pense est à l'appréciation de chacun... Si tu t'y retrouves mieux en faisant comme ca fais-le, sinon tu peux aussi très bien définir tous tes composants dans ta classe enfant de JFrame...

    A ma connaissance il n'y a pas vraiment de règle

  13. #13
    Invité
    Invité(e)
    Par défaut
    Je trouvais mieux de faire un eclasse pour le menu si je mettais ces actiosn en même temps.

    Maintenant je devrais faire une classe menu qui renverais une menuBar avec des JMenu.
    Mais je devrais quand même rajouter des JMenuItems dessus.
    Je vais peut-être faire une méthode qui va me créer mon menu oui mais pas plus.


    Maintenant je vois dans ton exêmple que tu utilse setVisible() pour afficher tbp c'est pas plus économique de le créer et de le détruire que de l'afficher ou le masquer ?

  14. #14
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Non en tout cas pas.

    Avec setVisible(true) tu agis sur une propriété de ton objet qui est déjà créé alors que si tu détruis et reconstruis à chaque fois tu vas redéfinir tout l'objet, ca prend plus de ressources

  15. #15
    Invité
    Invité(e)
    Par défaut
    Ok,

    L'autre avantage à utilise setVisible est aussi que les données qui y sont placées sont conservées..

    Merci beaucoup pour ton aide.
    Il me reste juste à voir un peux mieux à quoi sert SwingUtilities.invokeLater().

    Merci

  16. #16
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    invokelater() te permet d'éviter des problèmes de concurence avec l'EDT.

    Pour plus d'information tu peux te rendre sur ce lien:
    http://java.sun.com/j2se/1.5.0/docs/...lang.Runnable)

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par pollux007
    invokelater() te permet d'éviter des problèmes de concurence avec l'EDT.

    Pour plus d'information tu peux te rendre sur ce lien:
    http://java.sun.com/j2se/1.5.0/docs/...lang.Runnable)
    Kezako EDT ?

  18. #18
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Pour plus d'informations je t'invite à lire cet article:

    How to use Threads?

  19. #19
    Invité
    Invité(e)
    Par défaut
    Ok merci beaucoup.

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

Discussions similaires

  1. [Tkinter] Ajouter un element dans OptionMenu
    Par t_om84 dans le forum Tkinter
    Réponses: 12
    Dernier message: 29/05/2008, 17h46
  2. [Swing]Image en fond de JFrame+ objets par dessus
    Par matt92700 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 16/01/2006, 15h12
  3. Réponses: 2
    Dernier message: 07/12/2005, 03h21
  4. [netbean 5 dev] comment ajouter Mes elements en visuel
    Par alain57 dans le forum NetBeans
    Réponses: 1
    Dernier message: 14/10/2005, 05h38
  5. Réponses: 12
    Dernier message: 26/02/2003, 08h14

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