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 :

Problème JPanel et JTable


Sujet :

Composants Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut Problème JPanel et JTable
    Bonsoir,

    J'aimerais lors du clic sur un JButton, enlever un panel et en mettre un autre à la place (contenant un JTable remplit par une requête SQL).

    J'arrive bien à enlever le JPanel déjà existant, le problème vient pour mettre le JPanel contenant mon tableau.

    Une idée ?? Merci d'avance.

    Mon code, j'ai volontairement enlevé quelques lignes :
    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
    private void listeReservationActionPerformed(ActionEvent evt) {
            try {
                Statement stmt = Connexion.getStatement();
                ResultSet reservation = stmt.executeQuery("SELECT ... FROM ... ;");
                String col[] = {"Date de début", ...};
                String cont[][];
                cont = new String[50][8];
                int i = 0;
                while (reservation.next()) {
                    String dateDeb = reservation.getString("dateDebut");
                    ...
                    cont[i][0] = dateDeb;
                    cont[i][1] = dateFin;
                    ...
                    i++;
                }
                DefaultTableModel model = new DefaultTableModel(cont, col);
                JTable table = new JTable(model);
                (table.getColumnModel().getColumn(0)).setPreferredWidth(140);// largeur des colonnes
                (table.getColumnModel().getColumn(1)).setPreferredWidth(140);
                (table.getColumnModel().getColumn(2)).setPreferredWidth(140);
                (table.getColumnModel().getColumn(3)).setPreferredWidth(140);
                (table.getColumnModel().getColumn(4)).setPreferredWidth(140);
                (table.getColumnModel().getColumn(5)).setPreferredWidth(120);
                (table.getColumnModel().getColumn(6)).setPreferredWidth(120);
                (table.getColumnModel().getColumn(7)).setPreferredWidth(180);
                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);// pour le scroll horizontal
                table.setShowGrid(true);
                table.setShowVerticalLines(true);
                JScrollPane pane = new JScrollPane(table);
                panelListeReservation.add(pane);
                panelAjoutModMachine.setVisible(false);
                this.add(panelListeReservation);
                this.setVisible(true);
            } catch (SQLException ex) {
            }
        }

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    C'est quoi ton Layout?

    une methode, pas la meilleure consiste à remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    panelAjoutModMachine.setVisible(false);
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.remove(panelAjoutModMachine);
    Sinon une methode plus propre regarde CardLayout

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    En fait en faisant panelAjoutModMachine.setVisible(false); le panel s'enlève bien. C'est pour afficher l'autre où ça ne fonctionne pas.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    Oui j'ai bien compris le problème, le truc c'est qu'avec un setVisible(false) après l'affichage, si tu mets autre chose (ici ton autre JPanel) il ne remplace pas la place du premier. Il faut l'enlever avec remove().

    As tu essayé ma proposition?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    Oui j'ai essayé mais sans succès.

  6. #6
    Membre confirmé
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Points : 646
    Points
    646
    Par défaut
    Bonsoir
    Il faut mettre a jour ton composant avec la méthode monPanel.repaint();

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    J'ai fais ceci mais sans succès toujours le panel qui s'enlève mais le nouveau n'apparaît pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                DefaultTableModel model = new DefaultTableModel(cont, col);
                JTable table = new JTable(model);
                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                table.setShowGrid(true);
                table.setShowVerticalLines(true);
                panelAjoutModMachine.setVisible(false);
                JScrollPane pane = new JScrollPane(table);
                JPanel panel = new JPanel();
                panel.add(pane);
                this.add(panel);
                panel.repaint();
                panel.setVisible(true);

  8. #8
    Membre confirmé
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Points : 646
    Points
    646
    Par défaut
    Bonjour
    Je ne sais pas a quoi fait référence le "this" (à un JFrame peut être ?) mais en tout cas ce n'est pas
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.getContentPane().repaint();
    Sachant que this fait référence au JFrame contenant ton panel

    Ca veut dire que tu as mis le contenu de ton component à jour (this.add(panel)) et que tu dois le redessiner.

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,
    voici un petit exemple fonctionnel qui devrait t'aider...Il fallait garder le setVisible(false) et ajouter remove()

    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
     
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
     
    public class frame extends JFrame implements ActionListener{
     
    	JPanel panel1 = new JPanel();
    	JPanel panel2 = new JPanel();
    	JButton bouton1 = new JButton("effacer panel1 et afficher panel2");
    	JButton bouton2 = new JButton("effacer panel2 et afficher panel1");
     
    	public frame(){	
     
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setSize(400,400);
    		panel1.setPreferredSize(new Dimension(400,400));
    		panel1.add(bouton1);
    		panel1.setBackground(Color.red);
    		bouton1.addActionListener(this);
    		panel2.setPreferredSize(new Dimension(400,400));
    		panel2.add(bouton2);
    		panel2.setBackground(Color.green);
    		bouton2.addActionListener(this);
    		add(panel1);
    		setVisible(true);
    	}
     
    	public void Aff2(){
    		System.out.println("efface panel1 et affiche panel2");
    		panel1.setVisible(false);
    		remove(panel1);
    		panel2.setVisible(true);
    		add(panel2);
    	}
     
    	public void Aff1(){
    		System.out.println("efface panel2 et affiche panel1");
    		panel2.setVisible(false);
    		remove(panel2);
    		panel1.setVisible(true);
    		add(panel1);
    	}
     
    	public static void main(String[] args) {
    		frame ff = new frame();
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource().equals(bouton1))
    			Aff2();
    		else
    			Aff1();
    	}
    }

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    Merci à vous j'ai réussi à régler mon problème. Merci

Discussions similaires

  1. Problème avec ma JTable
    Par DreammyKetty dans le forum Débuter
    Réponses: 13
    Dernier message: 27/03/2008, 13h14
  2. [Form Builder] problème de JPanel et JTable
    Par syrius31 dans le forum NetBeans
    Réponses: 2
    Dernier message: 19/07/2007, 14h47
  3. Problème d'interaction JTable (états)
    Par Paranoid-Android dans le forum Composants
    Réponses: 4
    Dernier message: 10/05/2007, 14h33
  4. Problème avec une JTable
    Par Spinoza23 dans le forum AWT/Swing
    Réponses: 34
    Dernier message: 08/02/2007, 20h06
  5. Problèmes avec une JTable
    Par Fab916 dans le forum Composants
    Réponses: 4
    Dernier message: 12/01/2006, 14h11

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