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

AWT/Swing Java Discussion :

Application SWING / changement de vue


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Par défaut Application SWING / changement de vue
    Bonjour,
    je travaille actuellement sur un projet java utilisant une interface graphique SWING et je rencontre un problème :
    ma fenêtre de départ est compose d'un titre (JLabel) et de deux boutons (JButton) dont un s'appel nouveau. Je voudrais faire en sorte que quand je clique sur nouveau la fenêtre reste la même mais que la vue change c'est à dire que je passe dans mon cas à plein de JLabel et de JTextField et de deux autres boutons.
    Je pense que la gestion d'événement ne me posera pas de problème (public void mouseClick(MouseEvent)).

    Merci d'avance pour les réponses.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    Salut,

    Euh...
    Tu devrais peut-être posé une question, où se situe ton problème ? Je comprends à peu près ce que tu veux faire mais je ne comprends pas où tu bloques...

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Par défaut
    En fait je ne sais pas comment changer la "vue" ... c'est le JPanel qu'il faut changer ? il faut le changer dans la méthode mouseClick(MouseEvent) ?
    il faut créer un JPanel à part dans un autre classe ou bien ce n'est pas utile ?
    Comment changer de JPanel en gardant la même fenêtre ?


    Merci

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    oki je vois un peu mieux, alors il y a plusieurs possibilité :
    • jouer avec les méthodes add et remove : tu enleve les composants qui disparaissent et tu ajoute sceux qui apparaissent
    • jouer avec setVisible(),
    • utiliser un cardLayout : ce layout permet d'empiler plusieurs composants et de choisir lequel est au dessus.

    La méthode la plus propre me parait être la dernière (il y en a surement d'autres et peut-être mieux).

  5. #5
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Je suis d'accord avec les solutions de gailuris. Je vais juste suggérer qqchose :
    pour la première possibilité, il peut être plus facile d'avoir déjà un (ou des) JPanel de prêt pour chacune de vues, histoire de ne pas avoir à tout replacer à chaque fois. Et là, on se rapproche de la méthode du cardLayout

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Par défaut
    Je crois que je vais choisir la première solution :
    j'utilise générateur d'interfaces graphiques de NetBeans et ça a l'air assez pénible de rajouter un layout dans le code...
    Je vais créer mes JPanels dans des classes séparées et ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // ma classe étend JFrame
    public void mouseClicked(MouseEvent e) {
    // vérification bouton puis :
    this.remove(jPanel1);
    this.add( new AutrePanel() );
    }
    Merci, j'essaye ça de suite.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Par défaut
    Zut j n'y arrive pas
    Quand je mets le code de la réponse précédante, ça ne fait rien quand je clique sur le bouton ...

  8. #8
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Bonsoir, c'est à dire ça ne fait rien ?

    - ça ne supprime pas le premier panel ?
    - ça le supprime mais le second ne s'affiche pas ?

  9. #9
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    déjà, sur ta JFrame (ou classe qui en hérite), je te conseille de ne pas faire directement les add, remove, mais de passer par le ContentPane.
    Ensuite, joue sur le setVisible pour rafraichir l'affichage.

    En gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void mouseClicked(MouseEvent e) {
       // vérification bouton puis :
       this.getContentPane().setVisible(false);
       this.getContentPane().remove(jPanel1);
       this.getContentPane().add( new AutrePanel() );
       this.getContentPane().setVisible(true);
    }

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Par défaut
    En fait je vais prendre l'idée du CardLayout, ça me paraît plus simple.

    Ce que je fais c'est que j'ai une classe Fenetre qui étend JFrame. Dans celle-ci j'instancie trois Classes qui étendent JPanel et qui contiennent des JButtons. Je souhaite gérer l'affichage de ces classes grâce au CardLayout. Mais je bute sur les JButtons et la gestion de événements : l'événement 'click de la sourie' doit modifier le CardLayout.

    Faut-il gérer les événements dans ma classe Fenetre ou dans chacune des trois autre classes ?


    Merci par avance.

  11. #11
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    C'est pas très clair, mais je pense que le mieux, c'est de gérer ça dans le bouton directement, non?
    quitte à appeler une méthode de ta Fenetre.

    Mais je dois dire que je suis pas sûr d'avoir bien compris ta dernière question

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Par défaut
    En fait dans une de mes trois classes il faudrait faire en sorte que la méthode qui écoute les clicks de sourie puisse récupérer le CardLayout et ensuite luis envoyer le message next(...) mais je ne sais pas quoi mettre entre les parenthèses ...

  13. #13
    Membre chevronné Avatar de FredPsy
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Décembre 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 285
    Par défaut
    Bonsoir,
    Tu fait un MouseClicked ? sur un JButton ?

    Tu ferais mieux de mettre un observateur d'événement sur ton JButton. En fait, un ActionListener. Là, normalement, il devrait se passer quelque chose lorsque tu clique dessus.

    Cela devrait te donner à peu près ça :

    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
     
    private JButton getBTN()
        {
            bouton = New JButton("Nouveau");
            bouton.addActionListener(this);
     
            return bouton;
        } 
     
    public void actionPerformed(ActionEvent e)
        {
            if (e.getSource() == bouton)
                {
                    tonJPanel.setVisible(false);
                }
     
        }
    Bonsoir

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Par défaut
    Cela marche à moitié car j'ai un problème avec le 'this.setVisible(false)'.
    En effet quand je remplace cela par 'jButton1.setText("pop");' le changement est bien effectué donc l'écoute des événements est bonne. Mais avec le 'setVisible(false)' rien ne se produit (ou plutôt ça se passe comme si l'événement n'avait pas été traité) ...

    Peut-être le problème vient-il du CardLayout dans ma classe 'Fenetre extends JFrame'. Je trouve le moyen d'accéder au CardLayout depuis ma classe 'PanelAccueil extends JPanel' mais il me manque l'argument de next(...).

  15. #15
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut curseur this
    c'est parce que si tu te trouves dans un appel externe à l'instance courante, les curseur this n'est plus le même, logiquement. Donc si tu appelles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    new ActionListener() {actionPerformed(ActionEvent e) {
       setVisible(true);
    }}
    ça ne marche pas. Il faut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    new ActionListener() { actionPerformed(ActionEvent e) {
       leNomdeLaClasse.this.setVisible(true); // ou false
    }}

Discussions similaires

  1. <SWING> Changement de fenêtres dans une application
    Par raspac dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 01/06/2007, 10h41
  2. Réponses: 10
    Dernier message: 16/03/2006, 11h31
  3. [Stratégie] Mise à jour application SWING
    Par chr_one dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 26/08/2005, 15h31
  4. [Info][Ecran Tactile]Application Swing
    Par Rampa dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 12/07/2005, 10h09
  5. [JDBC][ARCHITECTURE] application swing
    Par benssj5 dans le forum JDBC
    Réponses: 6
    Dernier message: 31/08/2004, 19h25

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