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 :

Réutiliser un Jbutton dans plusieurs JPanel


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 4
    Par défaut Réutiliser un Jbutton dans plusieurs JPanel
    Bonjour à tous,
    Avant toute chose, je tiens à préciser que je ne suis pas informaticien et ne souhaite pas faire un code "propre" ou "pro", mais bien une petite interface basique composées de JButtons et de JPanels qui changent à chaque clic sur les JButtons (tout cela dans la même Frame).
    J'aimerais ajouter un bouton "home" permettant de revenir au menu de départ sur chacun de mes panels (dans la même JFrame). L'ActionListener fonctionne, seulement, lorsque j'entre la commande "b_home.add(p1)" et "b_home.add(p2)" un peu plus loin dans le code, c'est comme s'il m'écrasait le bouton sur mon premier panel et ne l'affiche que sur le deuxième (le dernier dans le code donc).
    Une idée ou suggestion pour pallier à ce problème?
    Merci d'avance.

    PS : Voici un bout de code, où le bouton home n'apparait que sur le dernier panel, soit "pa1".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            c.gridx = 2;
    	c.gridy = 3;
    	p_main.add(b_home,c);
    	b_home.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent e){
    		f_main.setContentPane(p_main); 
        		f_main.revalidate();
    		}
    	});
            c.gridx = 2;
    	c.gridy = 6;
    	pa1.add(b_home,c);

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Un composant Swing (comme un JButton dans ton cas) ne peut être contenu que dans un seul conteneur (un JPanel dans ton cas) à la fois (le mettre dans un conteneur le retire automatiquement de celui dans lequel il se trouve le cas échéant). Utilise 2 JButton, avec le même ActionListener (ou la même Action) (tu peux par exemple faire une méthode qui construit le bouton, et l'appeler dans dans les deux cas.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 4
    Par défaut
    Le problème c'est que j'aurai vraiment beaucoup de panels à la fin (une quarantaine), et je dois placer ce bouton sur chaque panel. Si je dois réimplémenter un nouveau bouton avec actionlistener à chaque fois, ça va faire bcp de lignes en plus... Pour la méthode, aurais-tu un exemple ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Déjà, pourquoi aurait-on besoin de 40 JPanels avec le même bouton ? Ces panels sont-ils dans la même fenêtre ou pas ? On peut faire une toolbar avec le bouton (instance unique) dans la fenêtre principale, et avoir 40 JInternalFrame par exemple, ou avoir un JPanel qui a un autre JPanel (éventuellement dans un JPanel intermédiaire avec CardLayout) et un bouton (forcément unique) dedans qui change cet autre JPanel. Ou encore avec une classe qui étend JPanel et qui créé systématiquement le "même" bouton (entendre le même code de création, pas la même instance) au même endroit.

    Pour la méthode, tout simplement, dans une classe X (ta classe principale, ta classe de JFrame principale, une classe Utils, etc.) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static JButton createButtonHome(JFrame f_main, JPanel p_main) {
           JButton b_home = new JButton("Home");
           b_home.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent e){
    		f_main.setContentPane(p_main); 
        		f_main.revalidate();
    		}
    	});
          return b_home;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p_main.add( X.createButtonHome(f_main,p_main),c);
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 4
    Par défaut
    J'aimerais développer un petit programme de diagnostic de voitures, via les signaux envoyés sur les bus CAN. L'user doit simplement cliquer sur le bouton correspondant à son problème, et avance à chaque fois dans des panels de plus en plus précis pour identifier le problème. J'aimerais donc implémenter le bouton "home" sur chaque panels afin qu'il ait la possibilité de revenir au début (trop compliqué d'implémenter un bouton précédent).
    Encore une fois, je ne suis pas informaticien et le but de mon projet n'est pas d'avoir un programme parfait, respectant les conventions JAVA, etc etc. J'ai juste un petit background JAVA que j'ai appris il y a 4 ans.
    Merci pour les infos, je testerai ça demain (j'aime pas mal la première idée de la toolbar instanciée).

    Edit : Oui, même JFrame.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Si le bouton est en haut, ça peut se faire via une toolbar sans trop de changement dans ton code (en passant par setContentPane() donc). Si le bouton est en bas, il faudra passer par un composant intermédiaire, et le plus simple serait de passer par un CardLayout (ce qui te permettrait de faire très simplement un bouton précédent en plus), encore que la solution avec JInternalFrame soit celle la plus standard, et pas besoin de bouton home : il suffit de fermer la JInternalFrame pour revenir au bureau.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Réutiliser un menu dans plusieurs activités
    Par propolis dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 17/12/2012, 18h52
  2. Positionnement d'un JButton dans un JPanel
    Par Eausport dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 25/05/2012, 12h32
  3. Creation Jbutton dans Jpanel
    Par taitai83 dans le forum Composants
    Réponses: 6
    Dernier message: 13/10/2009, 14h13
  4. Positionner précisement plusieurs JPanel dans une JFrame.
    Par RadicalBob dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 13/06/2006, 23h42
  5. [Debutant]Dessiner dans plusieurs JPanels. Probleme
    Par ahage4x4 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 22/05/2006, 13h32

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