Mise a jour de l'affichage d'un JPanel dans une JFrame [Résolu/Fermé]

yonathanzerb 10 Messages postés jeudi 1 juillet 2004Date d'inscription 8 août 2006 Dernière intervention - 28 juil. 2006 à 11:55 - Dernière réponse : yonathanzerb 10 Messages postés jeudi 1 juillet 2004Date d'inscription 8 août 2006 Dernière intervention
- 28 juil. 2006 à 15:03
Bonjour a tous,

Bon je sais c'est pas trés original comme sujet mais la je comprends
vraiment pas. J'ai une class qui hérite de JFrame. Dans le
constructeur, il y a la construction d'une fenetre contenant un JPanel.

Une méthode de la class permet de fabriquer le JPanel (methode panel()... )

Dans ce panel, il y a une JTable qui apparait a l'instanciation de la
méthode et qui est censé disparaitre (setvisible(false) ) apres clic
sur le bouton valider.

Mon problème est de la faire disparaitre. Mon ActionListener fait bien
son boulot mais la méthode repaint ne fonctionne pas et j'ai toujours
la JTable dans ma fenetre. Je vous laisse le code parceque la j'y
comprends plus rien moi...


merci d'avance pour vos réponses...


P.S: Si jamais vous avez des critiques concernant la formulation des
méthodes, ou des conseils sur la facons de programmer les IHM en Java,
je suis preneur!!! merci encore...


import javax.swing.*;


import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;


public class FormNewClient extends JFrame implements ActionListener, MouseListener

{

    /**

     *

     */

    private static final long serialVersionUID = 1L;

   

    private JLabel LNom, LAdresse, LCP, LVille, LTel, LMail;

    private JTextField TNom, TAdresse, TCP, TVille, TTel1, TTel2, TMail;

    private JButton BValider, BAnnuler;

    private JTable Clients;

    private JPanel panelClient;

   

    private static int posXLab = 10;

    private static int posXText = 90;

    private static int largLab = 70;

    private static int hauteur = 20;

   

    private String Nom;

    private String Adresse;

    private String CP;

    private String Ville;

    private String Tel1;

    private String Tel2;

    private String Mail;

   

    private boolean modifiable;

    private boolean visible;

   

/*    public static void main(String [] args)

    {

        new FormNewClient();

    }

*/   

    FormNewClient()

    {

        setTitle("Ajout d'un Client");

        setBounds(10,20,420,260);

        setExtendedState(JFrame.MAXIMIZED_BOTH);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        Container c=getContentPane();


        BorderLayout bl=new BorderLayout();

        c.setLayout(bl);

       

        this.modifiable = true;

        this.visible = false;

        this.Panel();

       

        c.add(panelClient, BorderLayout.CENTER);

        setVisible(true);

    }

   

    public void Panel()

    {

        panelClient = new JPanel();

        panelClient.setLayout(null);


        LNom = new JLabel("Nom:",SwingConstants.RIGHT);

        LNom.setBounds(posXLab,20,largLab,hauteur);

        panelClient.add(LNom);

       

        LAdresse = new JLabel("Adresse:",SwingConstants.RIGHT);

        LAdresse.setBounds(posXLab,50,largLab,hauteur);

        LAdresse.setVisible(visible);

        panelClient.add(LAdresse);

       

        LCP = new JLabel("CP:",SwingConstants.RIGHT);

        LCP.setBounds(posXLab,80,largLab,hauteur);

        LCP.setVisible(visible);

        panelClient.add(LCP);

       

        LVille = new JLabel("Ville:",SwingConstants.RIGHT);

        LVille.setBounds(posXLab+largLab+50,80,largLab,hauteur);

        LVille.setVisible(visible);

        panelClient.add(LVille);

       

        LTel = new JLabel("Téléphone:",SwingConstants.RIGHT);

        LTel.setBounds(posXLab,110,largLab,hauteur);

        LTel.setVisible(visible);

        panelClient.add(LTel);

       

        LMail = new JLabel("E-Mail:",SwingConstants.RIGHT);

        LMail.setBounds(posXLab,140,largLab,hauteur);

        LMail.setVisible(visible);

        panelClient.add(LMail);

       

        TNom = new JTextField(Nom,50);

        TNom.setBounds(posXText,20,300,hauteur);

        TNom.setEditable(modifiable);

        panelClient.add(TNom);

       

        TAdresse = new JTextField(Adresse,50);

        TAdresse.setBounds(posXText,50,300,hauteur);

        TAdresse.setEditable(modifiable);

        TAdresse.setVisible(visible);

        panelClient.add(TAdresse);

       

        TCP = new JTextField(CP,50);

        TCP.setBounds(posXText,80,60,hauteur);

        TCP.setEditable(modifiable);

        TCP.setVisible(visible);

        panelClient.add(TCP);

       

        TVille = new JTextField(Ville,50);

        TVille.setBounds(posXText+50+largLab,80,180,hauteur);

        TVille.setEditable(modifiable);

        TVille.setVisible(visible);

        panelClient.add(TVille);

       

        TTel1 = new JTextField(Tel1,50);

        TTel1.setBounds(posXText,110,145,hauteur);

        TTel1.setEditable(modifiable);

        TTel1.setVisible(visible);

        panelClient.add(TTel1);

       

        TTel2 = new JTextField(Tel2,50);

        TTel2.setBounds(posXText+145+10,110,145,hauteur);

        TTel2.setEditable(modifiable);

        TTel2.setVisible(visible);

        panelClient.add(TTel2);

       

        TMail = new JTextField(Mail,50);

        TMail.setBounds(posXText,140,300,hauteur);

        TMail.setEditable(modifiable);

        TMail.setVisible(visible);

        panelClient.add(TMail);

       

        Clients = new JTable(new MyTableModel());

        JScrollPane s = new JScrollPane(Clients);

        s.setBounds(10,50,390,120);

        Clients.addMouseListener(this);

        //Clients.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);

        //Clients.getSelectionModel().addListSelectionListener(this);

        if (visible)

        {

            s.setVisible(false);

            Clients.setVisible(false);

        }

        else {

            s.setVisible(true);

            Clients.setVisible(true);

        }

        panelClient.add(s);

       

        BValider = new JButton();

        if (modifiable) BValider.setText("Valider");

        else BValider.setText("Modifier");

        BValider.addActionListener(this);

        //BValider.setBorder(bord);

        BValider.setBounds(posXText+25,180,100,hauteur+10);

        panelClient.add(BValider);

       

        BAnnuler = new JButton("Annuler");

        //BValider.setBorder(bord);

        BAnnuler.setBounds(posXText+175,180,100,hauteur+10);

        BAnnuler.addActionListener(this);

        panelClient.add(BAnnuler);

    }

   

    public void actionPerformed(ActionEvent e)

    {

    System.out.println("ChampVisible: " + Clients.toString());

        if (e.getActionCommand() == BValider.getText()) {

    System.out.println("click bouton Valider");

            this.visible = true;

    System.out.println("Visible: " + visible);

            //Clients.setVisible(false);

            this.Panel();

            panelClient.repaint();

        }

    }


    public void mouseClicked(MouseEvent arg0) {

        int ligne = Clients.getSelectedRow();

        //int colonne = Clients.getSelectedColumn();

    System.out.println("Ligne Selectionnée sur click:" + ligne);

        TNom.setText((String)Clients.getValueAt(ligne,0));

        TAdresse.setText((String)Clients.getValueAt(ligne,1));

        TCP.setText((String)Clients.getValueAt(ligne,2));

        TVille.setText((String)Clients.getValueAt(ligne,3));

        TTel1.setText((String)Clients.getValueAt(ligne,4));

    }


    public void mouseEntered(MouseEvent arg0) {

        // TODO Auto-generated method stub

       

    }


    public void mouseExited(MouseEvent arg0) {

        // TODO Auto-generated method stub

       

    }


    public void mousePressed(MouseEvent arg0) {

        // TODO Auto-generated method stub

       

    }


    public void mouseReleased(MouseEvent arg0) {

        // TODO Auto-generated method stub

       

    }   

}
Afficher la suite 

2 réponses

Twinuts 5261 Messages postés dimanche 4 mai 2003Date d'inscription 20 avril 2018 Dernière intervention - 28 juil. 2006 à 13:40
+3
Utile
Salut,


Conseil:

normalement une variable et une methode en java commence par une
minuscule, et les début de nom que tu donne ne sont pas super explicite
:D (le seul cas ou c'est entierement en maj c'est pour les 'final')
    exemple :
        private JLabel lblNom, lblAdresse, lblCP, lblVille, lblTel, lblMail;
        private JTextField txtNom, txtAdresse, txtCP, txtVille, txtTel1, txtTel2, txtMail;
        private JButton btValider, btAnnuler;
        private JTable tableClients;
        private JPanel panelClient;
        private String strNom;
        private String strAdresse;

        public void panel(){...}


Pour le constructeur:

        setExtendedState(MAXIMIZED_BOTH);//pas besoin de faire JFrame.xxx tu en herite...

        //c'est déjà le cas

        //Container c=getContentPane();

        //BorderLayout bl=new BorderLayout();

        //c.setLayout(bl);

        ...

        //c.add(panelClient, BorderLayout.CENTER);//pas besoin

        setContentPane(panelClient);//cela suffit et c'est bien plus rapide à écrire :P


Pour ton problème déjà pour quoi te sent tu obligé de refaire toutes
les instances de tes objet à chaque appel de la methode panel ?

ensuite si tu fais s.setVisible(false) dans ce cas c'est redondant de faire un setvisible sur ton jtable.


essaye de ne faire qu'une ionstance de tes objets et il y a 90% de chance que cela resoude ton problème


------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Twinuts
yonathanzerb 10 Messages postés jeudi 1 juillet 2004Date d'inscription 8 août 2006 Dernière intervention - 28 juil. 2006 à 15:03
0
Utile
merci beaucoup pour tout tes conseils. j'ai effectivement découpé mon code, séparé tous les objets et je les ai instancié une seule fois. maintenant (apres quelques petit bug) ca marche correctement.

merci beaucoup pour les conseils. il est important pour moi de faire un code relisible et pouvant etre entretenu.

a plus tard pour de nouveaux problèmes... lol
Commenter la réponse de yonathanzerb

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.