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 :

Mon JPanel ne s'affichage qu'au redimensionnement de la fenêtre


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 74
    Points : 85
    Points
    85
    Par défaut Mon JPanel ne s'affichage qu'au redimensionnement de la fenêtre
    Bonjour à tous.

    Débutant en Java, j'expérimente depuis peu la merveilleuse complexité de Swing.

    Mon problème est le suivant :

    J'ai 3 classes : une extension de JFrame, une extension de JDialog et une extension de JPanel.
    Mon JFrame est ma fenêtre principale, et quand je clique sur un bouton de JDialog, celui-ci s'efface et mon JPanel doit apparaître dans ma fenêtre principale.
    Alors celui-ci le fait, mais uniquement après redimensionnement de ma fenêtre principale avec la souris !
    Ce qui me laisse penser que mon code concernant les listeners est bon, mais que c'est juste un petit problème d'affichage avec des méthodes que je ne maitrise pas (d'après d'anciens forums, j'ai essayé les repaint, les updateUI sans plus de succès).

    Si quelqu'un a une idée, je suis preneur.

    D'avance merci.

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 74
    Points : 85
    Points
    85
    Par défaut
    Si il y en a que ça inspire voici les codes :

    Celui de mon JPanel :
    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
     
    import java.awt.*;
     
     
    import javax.swing.*;
     
    public class PanAdherent extends JPanel
    {
     
    	JLabel labSearch  = new JLabel("Recherche par :");
    	JLabel labAut = new JLabel("AUTEUR :");
    	JLabel labTitre = new JLabel("TITRE :");
    	JLabel labTheme = new JLabel("THEME :");
    	JLabel labEditeur = new JLabel("EDITEUR :");
    	JLabel labIsbn = new JLabel("ISBN : ");
    	JTextField texAut = new JTextField();
    	JTextField texTitre = new JTextField();
    	JComboBox texTheme = new JComboBox();
    	JComboBox texEditeur = new JComboBox();
    	JTextField texIsbn = new JTextField();
    	JButton btnAut = new JButton("Supprimer ce champ");
    	JButton btnTitre = new JButton("Supprimer ce champ");
    	JButton btnTheme = new JButton("Supprimer ce champ");
    	JButton btnEditeur = new JButton("Supprimer ce champ");
    	JButton btnIsbn = new JButton("Supprimer ce champ");
    	JButton btnClearAll = new JButton("Vider tout les champs");
    	JButton btnSearch = new JButton("Lancer la recherche");
     
     
     
    	public PanAdherent()
    	{
    		super();
    		setSize(800,600);
    		setVisible(true);
    		initControl();
    	}
     
    	public void initControl()
    	{
    		setLayout(new BorderLayout());
     
    		JPanel zoneClient = new JPanel(new BorderLayout());
    		JPanel panCenter = new JPanel();
    		JPanel panWest = new JPanel();
    		JPanel panSouth = new JPanel();
     
    		panCenter.setLayout(null);
    		panWest.setLayout(null);
    		panSouth.setLayout(null);
     
    		zoneClient.add(panWest,BorderLayout.WEST);
    		zoneClient.add(panSouth, BorderLayout.SOUTH);
    		zoneClient.add(panCenter, BorderLayout.CENTER);
     
    		labAut.setBounds(5, 5, 100, 20);
    		panWest.add(labAut);
     
    		add(zoneClient);
     
    	}
     
    }
    Celui de mon JDialog :

    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
     
    import java.awt.BorderLayout;
    import java.awt.CardLayout;
    import java.awt.Container;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.*;
     
     
    public class AfficheConnect extends JDialog
    {
    	private JPanel panPrincipal = (JPanel) this.getContentPane();
    	static JButton butBiblio = new JButton("Bibliothécaire");
    	static JButton butAdh = new JButton("Adhérent");
    	static JButton butGest = new JButton("Gestionnaire de Fond");
    	static JButton butResp = new JButton("Responsable Administratif");
     
    	public AfficheConnect()
    		{
    		setSize(400,300);
    		setResizable(false);
    		setTitle("Choisissez un type de connection : ");
    		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    		setModal(true);
    		setLocationRelativeTo(null);
    		initControl();
    		}
     
    	public void initControl()
    	{
    		panPrincipal.setLayout(new GridLayout(2,2));
    		panPrincipal.add(butAdh);
    		panPrincipal.add(butBiblio);
    		panPrincipal.add(butGest);
    		panPrincipal.add(butResp);
     
    		butGest.addActionListener(new AppActionListener());
     
    	}
     
    	class AppActionListener implements ActionListener
    	{
    		public void actionPerformed(ActionEvent e)
    		{
    			if (e.getSource() == butAdh)
    			{
     
    			}
     
    			if (e.getSource() == butBiblio)		
    			{
     
    				dispose();
    			}
     
    			if (e.getSource() == butGest)
    			{
    				dispose();
    			}
     
    			if (e.getSource() == butResp)
    			{
     
    			}
    		}
    	}
    }
    Et enfin celui de mon JFrame, contenant le main :

    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
     
    public class Main extends JFrame 
    {
    public Main() 
    	{
    		setSize(800,600);
    		setResizable(true);
    		setLocationRelativeTo(null);
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		initMenu();
    		initControl();
    	}
    private void initControl()
    	{butConnect.setSize(50,50);
    		panCon.add(butConnect);
    zoneClient.setLayout(new BorderLayout());
    AfficheConnect.butGest.addActionListener(new AppActionListener());
    zoneClient.add(panCon, BorderLayout.CENTER);
    }
    class AppActionListener implements ActionListener
    	{
    		public void actionPerformed(ActionEvent e)
    		{
    			if (e.getSource() == mnuQuitterQuit ) confirmQuit();
    			if (e.getSource() == mnuQuitterDeconnect) confirmDeconnect();
    			if (e.getSource() == AfficheConnect.butGest) panBurGest();
    		}
    	}
     
    	public void confirmQuit()
    	{
    		int rep = JOptionPane.showConfirmDialog(this, "Voulez-vous vraiment quitter l'application ?", "Confirmation", JOptionPane.YES_NO_OPTION);
    		if (rep == 0) System.exit(0);
    	}
     
    	public void confirmDeconnect()
    	{
    		int rep = JOptionPane.showConfirmDialog(this, "Voulez-vous vraiment vous déconnecter ?", "Confirmation", JOptionPane.YES_NO_OPTION);
    		if (rep == 0) 
    		{
    			AfficheConnect Connect = new AfficheConnect();
    			Connect.setVisible(true);
    		}
    	}
     
    	public void panBurGest()
    	{
    		zoneClient.removeAll();
    		BiblioBase bb = new BiblioBase();
    		zoneClient.add(bb,BorderLayout.CENTER);
    		Main.getMnuAdh().setEnabled(true);
    		Main.getMnuAut().setEnabled(true);
    		Main.getMnuEmp().setEnabled(true);
    		Main.getMnuEx().setEnabled(true);
    		Main.getMnuLivre().setEnabled(true);
    		Main.getMnuTheme().setEnabled(true);
    		Main.getMnuAdmin().setEnabled(false);
    		zoneClient.repaint();
    		zoneAcceuil.update( zoneAcceuil.getGraphics() );
    		zoneAcceuil.updateUI();
     
     
    	}
    public static void main(String[] args)
    	{ 
    		Main fenetre = new Main(); 
    		fenetre.setVisible(true); 
    		AfficheConnect Connect = new AfficheConnect();
    		Connect.setVisible(true);
    	}
    }

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Quand tu ajoute des sous composants à un composant déjà visible, il faut
    1) penser à appeler validate () sur ce composant
    2) tout faire depuis le thread de l'EDT si ce n'est pas déjà le cas (voir la FAQ à ce sujet)

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 74
    Points : 85
    Points
    85
    Par défaut
    Effectivement, j'ai ajouter validate() au conteneur principal, et ça marche ! Concernant les threads, on a pas vu ça en formation, et vu qu'on est à la bourre, je pense pas qu'on le verra, j'étudierai ça plus tard en "auto-formation".
    Merci !

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

Discussions similaires

  1. JFrame affichage vide de mon JPanel
    Par volodiaa dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 24/02/2014, 13h31
  2. Réponses: 10
    Dernier message: 08/12/2006, 00h01
  3. Mon JS modifie l'affichage de mon formulaire
    Par StreM dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/06/2006, 12h59
  4. Problème d'affichage lors du redimensionnement
    Par sidi.elmoctar dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 12/04/2006, 08h44
  5. [JPanel] probleme d'affichage
    Par joneil dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 06/05/2005, 18h15

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