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

Composants Java Discussion :

Impossible d'afficher un nouveau panel suite à une sélection sur une JTable


Sujet :

Composants Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut Impossible d'afficher un nouveau panel suite à une sélection sur une JTable
    Bonjour, pour un travail, je dois créer un programme Java capable, après avoir sélectionné une ligne d'une JTable, de la modifier suite à l'affichage d'un formulaire.

    Je vous met ci-dessous le code et des images pour que ce soit compréhensible. Mon problème est que le panel du formulaire ne s'affiche pas après avoir cliqué sur le bouton modifier, alors que les données sont bien envoyées !

    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
    125
    126
    public PanelAjoutVehicule(FenetrePrincipale fenetre, Vehicule vehi)
        {
            this.fenetre = fenetre;
            //this.removeAll();
     
     
            this.setBorder(BorderFactory.createTitledBorder("Modification d'un véhicule"));
            this.setLayout(new BorderLayout());
     
            GestionAction g = new GestionAction();
            ModificationVehicule m = new ModificationVehicule();
     
            panneauFormulaire = new JPanel();
            panneauFormulaire.setLayout(new GridLayout(10,1));
     
            panneauBoutons = new JPanel();
            panneauBoutons.setLayout(new FlowLayout());
     
            try
            {
                arrayInfos = controle.recupInfos(vehi);
                System.out.println(arrayInfos.toString());
            }
            catch (SQLException ex) {
            Logger.getLogger(PanelListing.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NamingException ex) {
            Logger.getLogger(PanelListing.class.getName()).log(Level.SEVERE, null, ex);
            }
     
            labelClient = new JLabel("Client* : ");
            labelClient.setHorizontalAlignment(JLabel.RIGHT);
            panneauFormulaire.add(labelClient);
            comboxClient = new JComboBox();
            comboxClient.setSelectedItem(arrayInfos.get(0).toString());
            comboxClient.setEditable(false);
            panneauFormulaire.add(comboxClient);
     
            labelMarque = new JLabel("Marque* : ");
            labelMarque.setHorizontalAlignment(JLabel.RIGHT);
            panneauFormulaire.add(labelMarque);
            comboxMarque = new JComboBox();
            comboxMarque.setSelectedItem(arrayInfos.get(1).toString());
            comboxMarque.setEditable(false);
            panneauFormulaire.add(comboxMarque);
     
            labelModele = new JLabel("Modele* : ");
            labelModele.setHorizontalAlignment(JLabel.RIGHT);
            panneauFormulaire.add(labelModele);
            comboxModele = new JComboBox();
            comboxModele.setSelectedItem(arrayInfos.get(2).toString());
            panneauFormulaire.add(comboxModele);
     
            labelChassis = new JLabel("N° Chassis* : ");
            labelChassis.setHorizontalAlignment(JLabel.RIGHT);
            panneauFormulaire.add(labelChassis);
            textChassis = new JTextField(17);
            textChassis.setText(vehi.getNChassis());
            textChassis.setEditable(true);
            panneauFormulaire.add(textChassis);
     
            labelCylindree = new JLabel("Cylindree* : ");
            labelCylindree.setHorizontalAlignment(JLabel.RIGHT);
            panneauFormulaire.add(labelCylindree);
            textCylindree = new JTextField(4);
            textCylindree.setText(Integer.toString(vehi.getCylindree()));
            textCylindree.setEditable(true);
            panneauFormulaire.add(textCylindree);
     
            labelPlaque = new JLabel("Plaque* : ");
            labelPlaque.setHorizontalAlignment(JLabel.RIGHT);
            panneauFormulaire.add(labelPlaque);
            textPlaque = new JTextField(7);
            textPlaque.setText(vehi.getPlaque());
            textPlaque.setEditable(true);
            panneauFormulaire.add(textPlaque);
     
            labelSociete = new JLabel("Societe : ");
            labelSociete.setHorizontalAlignment(JLabel.RIGHT);
            panneauFormulaire.add(labelSociete);
            textSociete = new JTextField(20);
            textSociete.setText(vehi.getSociete());
            textSociete.setEditable(true);
            panneauFormulaire.add(textSociete);
     
            labelLpg = new JLabel("Lpg* : ");
            labelLpg.setHorizontalAlignment(JLabel.RIGHT);
            checkLpg = new JCheckBox("Oui");
            if(vehi.getLpg())
            {
                checkLpg.setSelected(true);
            }
            panneauFormulaire.add(labelLpg);
            panneauFormulaire.add(checkLpg);
     
            checkLpg.addItemListener(g);
     
            String [] contenu = {"Essence 95","Essence 98","Diesel","Electrique"};
            labelCarburant = new JLabel("Carburant* : ");
            labelCarburant.setHorizontalAlignment(JLabel.RIGHT);
            panneauFormulaire.add(labelCarburant);
            comboxCarburant = new JComboBox(contenu);
            comboxCarburant.setSelectedItem(vehi.getCarburant());
            comboxCarburant.setMaximumRowCount(4);
            comboxCarburant.setEditable(false);
            panneauFormulaire.add(comboxCarburant);
     
            labelDateRepa = new JLabel("Date debut reparation* : ");
            labelDateRepa.setHorizontalAlignment(JLabel.RIGHT);
            panneauFormulaire.add(labelDateRepa);
            dateDebRepa = new JSpinner();
                Calendar cal = Calendar.getInstance();
                Date now = cal.getTime();
            dateDebRepa.setModel(new SpinnerDateModel(now, now, now, Calendar.MONTH));
            dateDebRepa.setEditor(new JSpinner.DateEditor(dateDebRepa, "dd/MM/yyyy"));
            panneauFormulaire.add(dateDebRepa);
     
            boutonModifier = new JButton("Modifier");
            panneauBoutons.add(boutonModifier, BorderLayout.EAST);
            boutonModifier.addActionListener(m);
     
            this.add(panneauFormulaire,BorderLayout.CENTER);
            this.add(panneauBoutons,BorderLayout.SOUTH);
     
            //this.repaint();
            //this.setVisible(true);
        }
    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
    public class PanelModification extends JPanel {
     
        private FenetrePrincipale fenetre;
        private JPanel panneauListing, panneauBoutons;
        private ApplicationControlleur controle;
     
        private JButton boutonModifier;
        private JTable tableListing;
        private AllVehicule voiture;
     
        private GestionnaireAction gA;
        private GestionnaireSelection gS;
     
        public PanelModification(FenetrePrincipale fenetre)
        {
            this.fenetre = fenetre;
            this.setLayout(new BorderLayout());
     
            controle = new ApplicationControlleur();
            gA = new GestionnaireAction();
            gS = new GestionnaireSelection();
     
            panneauListing = new JPanel();
            panneauListing.setLayout(new BorderLayout());
            panneauListing.setBorder(BorderFactory.createTitledBorder("Listing des vehicules"));
     
            panneauBoutons = new JPanel();
            panneauBoutons.setLayout(new FlowLayout());
     
            this.add(panneauListing, BorderLayout.CENTER);
            this.add(panneauBoutons, BorderLayout.SOUTH);
     
            boutonModifier = new JButton("Modifier");
            boutonModifier.addActionListener(gA);
            boutonModifier.setEnabled(false);
     
            panneauBoutons.add(boutonModifier);
     
            chargerListeVehicule();
        }
     
        private class GestionnaireAction implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
                if(e.getSource() == boutonModifier)
                {
                    int indLigne = tableListing.getSelectedRow();
     
                    Vehicule vehicule = voiture.getRow(indLigne);
     
                    if(vehicule == null)
                    {
                        JOptionPane.showMessageDialog(null, "Erreur : ligne du tableau vide.", "Erreur sélection", JOptionPane.ERROR_MESSAGE);
                    }
                    else
                    {   
                        System.out.println(vehicule.toString());
                        PanelAjoutVehicule formulaire = new PanelAjoutVehicule(fenetre, vehicule);
                    }
                }
            }
        }
     
        private class GestionnaireSelection implements ListSelectionListener
        {
            public void valueChanged(ListSelectionEvent e)
            {
                if(e.getValueIsAdjusting())
                {
                    return;
                }
                ListSelectionModel lsm = (ListSelectionModel)e.getSource();
                if(lsm.isSelectionEmpty())
                {
                    boutonModifier.setEnabled(false);
                }
                else
                {
                    boutonModifier.setEnabled(true);
                }
            }
        }
     
        public void chargerListeVehicule()
        {
            try
            {
                if(tableListing != null)
                {
                    panneauListing.removeAll();
                }
     
                voiture = new AllVehicule(controle.listingVehicule());
                tableListing = new JTable(voiture);
                tableListing.getSelectionModel().addListSelectionListener(gS);
                tableListing.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
     
                panneauListing.add(tableListing.getTableHeader(), BorderLayout.NORTH);
                panneauListing.add(tableListing);
            }
            catch (SQLException ex) {
                Logger.getLogger(PanelListing.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NamingException ex) {
                Logger.getLogger(PanelListing.class.getName()).log(Level.SEVERE, null, ex);
            } catch (AjoutException ex) {
                Logger.getLogger(PanelListing.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    Nom : prob java.png
Affichages : 168
Taille : 139,0 Ko

    Voila, s'il vous faut autre chose, n'hésitez pas !

    Cordialement, Florian.

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Quand on modifie la disposition des composants d'un conteneur (donc en particulier si on en ajoute de nouveaux), il faut indiquer à Swing que le layout doit être refait. Forcer le redessin n'est pas toujours utile, mais peut être indispensable, et ne fait pas de mal

    Là, où tu as tes commentaires (lignes 124 & 125 dans le premier bloc de code dans ton message) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //this.repaint();
    //this.setVisible(true);
    Remplace-les par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this.revalidate();
    this.repaint();
    Pense à décommenter le removeAll(), sinon tes composants vont s'entasser au fur et à mesure des nouvelles sélections et ça peut mettre un sacré bazar dans le layout. Si tu ne dois pas tout supprimer, il faudra mémoriser la liste des composants ajoutés pour les enlever avant d'ajouter les nouveaux.
    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
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    Merci, je vais tester vos recommandations.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    Aucun changement. Les infos sont toujours bien reçues (j'ai mis des system.out.println pour voir jusqu'où ca allait), mais la fenêtre ne se modifie pas.

  5. #5
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    En regardant de plus près ton code, je m'aperçois que tu ne mets pas le PanelAjoutVehicule dans la JFrame, ou dans un de sous conteneur : donc pas étonnant que ça ne s'affiche pas.

    Pourquoi d'ailleurs passer l'instance de fenêtre à ce panel, puisque tu ne t'en sers pas ?

    Tu dois absolument mettre tout composant à afficher dans un conteneur. En appelant la méthode add() de ce conteneur et en faisant revalidate() et repaint() après appel de ce add(), si le conteneur est déjà affiché.

    Je ne sais pas exactement comment est ta fenêtre (JFrame), mais mettons que tu aies fait quelque chose comme ceci pour la construire :
    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
     
    JFrame frame = new JFrame(...);
     
     
    JPanel mainPanel = new JPanel(new BorderLayout()); // un conteneur principal avec BorderLayout
     
    JTable table = ...; // la table (peu importe comme elle est créée)
     
    mainPanel.add( table ); // la table est mise en position par défaut dans le BorderLayout, donc centrale
     
    JPanel dataPanel = new JPanel(); // on créé un conteneur pour afficher autre chose (il est vide pour le moment)
    mainPanel.add( dataPanel, BorderLayout.SOUTH ); // on le met en bas dans le BorderLayout
     
     
    frame.getContentPane().add( mainPanel ); // le conteneur principal est mis dans le conteneur standard de la fenêtre
     
     
    // on ajoute l'écouteur de sélection de la JTable (cet écouteur aura besoin de l'instance de dataPanel : lui passer donc cette variable/valeur, d'une manière ou d'une autre).
     
     
    frame.setVisible(true);
    Et bien dans l'écouteur de sélection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    JPanel form = new ... // on crée le formulaire en fonction de la sélection
     
    dataPanel.removeAll(); // on supprime tout ce qui se trouve dans le dataPanel
     
    dataPanel.add( form ); // on met le formulaire dedans
     
    dataPanel.revalidate();
    dataPanel.repaint();

    J'ai mis plusieurs JPanel entre le contentPane de la fenêtre et le form, mais c'est pareil si tu mets directement le form dans le contentPane (à part le removeAll, bien sûr).
    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.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    J'ai du mal à comprendre votre méthode, en le comparant à mon code, mais je vais essayer !

Discussions similaires

  1. Réponses: 14
    Dernier message: 11/03/2014, 09h01
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. afficher une valeur sur une feuille lorsqu'une checkbox est cochée
    Par chrnoe dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/12/2008, 14h39

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