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 :

Problème d'affichage GridBagLayout


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut Problème d'affichage GridBagLayout
    Bonjour.

    Je commence à m'intéresser un peu à Java et aux interfaces que l'on peut faire avec.

    J'ai donc décidé de faire une petite fenetre tout ce qu'il y a de plus simple, et de la remplir avec des petits JLabel et autres.

    J'ai choisis de disposer mes éléments grâce à GrodBaglayout.

    Cependant, lors du lancement, je n'ai rien dans ma fenetre! (je code avec eclipse 3.2, et ma version de java est:

    java version "1.5.0_11"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
    Java HotSpot(TM) Client VM (build 1.5.0_11-b03, mixed mode)


    Voici les deux fichiers concernés.

    Je ne sais pas si cela vient de mon eclipse ou autre :

    Fichier ContactPanel.java
    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
    package td1.gui;
     
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
     
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    public class ContactPanel extends JPanel{
     
    	/**
             * 
             */
    	private static final long serialVersionUID = -4225265207097030393L;
    	private JLabel l_nom = null;
    	private JLabel l_email = null;
    	private JTextField txt_nom = null;
    	private JTextField txt_email = null;
    	private JButton btn_image = null;
    	private JLabel l_image = null;
     
    	public ContactPanel(){
    		initialize();
    	}
     
    	public void initialize(){
    		this.setLayout(new GridBagLayout());
    		this.setSize(800, 600);
     
    		this.l_nom = new JLabel("Nom : ");
            GridBagConstraints gridBagConstraints = new GridBagConstraints();
            gridBagConstraints.gridx = 0;
            gridBagConstraints.gridy = 0;
            gridBagConstraints.weightx = 1.0D;
            gridBagConstraints.weighty = 1.0D;
            this.add(l_nom, gridBagConstraints);
     
            this.l_email = new JLabel("Email : ");
    		GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
    		gridBagConstraints2.gridx = 0;
    		gridBagConstraints2.gridy = 1;
    		gridBagConstraints2.weightx = 1.0D;
    		gridBagConstraints2.weighty = 1.0D;
            this.add(l_email, gridBagConstraints2);
     
            this.txt_nom = new JTextField(40);
    		GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
    		gridBagConstraints3.gridx = 1;
    		gridBagConstraints3.gridy = 0;
    		gridBagConstraints3.weightx = 1.0D;
    		gridBagConstraints3.weighty = 1.0D;
            gridBagConstraints3.gridwidth = 5;
            gridBagConstraints3.gridheight = 1;
            this.add(txt_nom, gridBagConstraints3);
     
    		this.txt_email = new JTextField(40);
    		GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
    		gridBagConstraints4.gridx = 1;
    		gridBagConstraints4.gridy = 1;
    		gridBagConstraints4.weightx = 1.0D;
    		gridBagConstraints4.weighty = 1.0D;
            gridBagConstraints4.gridwidth = 5;
            gridBagConstraints4.gridheight = 1;
            this.add(txt_email, gridBagConstraints4);
     
    		this.btn_image = new JButton("Image");
    		GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
    		gridBagConstraints5.gridx = 1;
    		gridBagConstraints5.gridy = 2;
    		gridBagConstraints5.weightx = 1.0D;
    		gridBagConstraints5.weighty = 1.0D;
            gridBagConstraints5.gridwidth = 2;
            gridBagConstraints5.gridheight = 2;
            this.add(btn_image, gridBagConstraints5);
     
    		this.l_image = new JLabel();
    		GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
    		gridBagConstraints6.gridx = 1;
    		gridBagConstraints6.gridy = 4;
    		gridBagConstraints6.weightx = 1.0D;
    		gridBagConstraints6.weighty = 1.0D;
            this.add(l_image, gridBagConstraints6);
    	}
     
    }
    Et ContactView.java

    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
    package td1.gui;
     
    import javax.swing.JFrame;
     
    public class ContactView extends JFrame {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = -8807076688280671890L;
    	private ContactPanel panel;
     
    	public ContactView(){
    		initialize();
    		initFrameSize();
    	}
     
    	/**
             * This method initializes this
             * 
             */
    	private void initialize() {
    		this.setVisible(true);
    		this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
    		this.setTitle("Contact");
    		this.setSize(800,600);
    		this.setResizable(false);
     
    		panel = new ContactPanel();
    		this.getContentPane().add(panel);
    	}
     
    	/**
             * Centre la fenetre sur l'écran
             *
             */
    	private void initFrameSize() {
    		  java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    		  int xwin = getSize().width;
    		  int ywin = getSize().height;
    		  setBounds( (screenSize.width-xwin)/2, (screenSize.height-ywin)/2, xwin, ywin);
    	}
     
    	public static void main(String [] args){
    		new ContactView();
    	}
    }

    Je pense pourtant ne pas avoir commis d'erreur... si quelqu'un sait d'où cela vient et qu'il peut me renseigner, je lui en serait très reconnaissant.

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    J'ai ajouté une ligne à mon code qui fait que ma fenetre s'affiche enfin avec les composants, mais la taille n'est plus de 800*600 mais elle se réduit aux composants!

    Je l'ajoute à la fin de ma méthode initialize dans ContactView.java


    Comment cela marche java, on m'explique? ^^

  3. #3
    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à, je dois te dire que pour un débutant en Java, je trouve ton code très clean

    Voici quelques conseils, la plupart ne sont pas essentiels, mais disons qu'il s'agit de bonnes habitudes à prendre.

    Dans les constructeurs des classes qui héritent d'autres, prend l'habitude de faire un appel au constructeur super(...).

    Pour centrer la JFrame, il existe une méthode qui fait ça bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frame.setLocationRelativeTo(frame.getParent());
    Met le setVisible(true) en dernier, après avoir mis tous les composants.


    Le pack redéfinit la taille de la fenêtre en fonction des composants. Ils met tous les éléments à leur taille normale (preferredSize). Si tu veux avoir une fenetre de 800*600, tu n'en as pas besoin.

    Je pense que ça devait afficher ta fenêtre car cette instruction la redimensionnait, ce qui a pour effet de redessiner la fenêtre (et ses composants). Et comme toi tu as ajouté des éléments (le ContactPanel) après l'affichage et qu'il n'y a pas eu de rafraichissement, ils n'ont pas été dessinés.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    Merci pour le compliment du codage, j'ai fait un peu d'objet avant donc...


    Je vais tester ca tout de suite,merci encore

  5. #5
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Salut,

    Vu que tu débutes et on est tous passé par là, (d'ailleurs j'y suis encore), pour tout ce qui est du GridBagLayout il existe une classe développé par Cay Hortsmann (http://horstmann.com/corejava.html) et qui est vraiment très très simple à utiliser et en GPL :

    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
    /* 
      GBC - Une classe pour maîtriser le GridBagLayout
      Copyright (C) 2002 Cay S. Horstmann (http://horstmann.com)
     
      Ce programme est un logiciel libre. Vous pouvez le distribuer et/ou
      le modifier aux termes des conditions du "GNU General Public License"
      publié par Free Software Foundation (version 2 de la Licence ou 
      (à votre choix) toute version ultérieure).
      
      Ce programme est distribué dans l'espoir qu'il sera utile,
      mais SANS AUCUNE GARANTIE, ni même la garantie implicite de
      QUALITE MARCHANDE ou D'ADAPTATION A UN OBJECTIF PARTICULIER.
      Voir le GNU General Public License pour en savoir plus.
      
      Vous devriez avoir reçu une copie du GNU General Public License
      avec ce programme ; dans le cas contraire, écrivez à Free Software
      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
     */
     
     
    import java.awt.*; 
    /**
            Cette classe simplifie l'utilisation de la classe GridBagConstaints.
     */
     
    @SuppressWarnings("serial")
    public class GBC extends GridBagConstraints{
    	/**
                    Construit un GBC avec une position gridx et gridy donnée
                    et toutes les autres valeurs de GridBagConstraints définies
                    sur le paramètre par défaut.
                    @param gridx La position gridx
                    @param gridy La position gridy
             */
    	public GBC(int gridx, int gridy){
    		this.gridx = gridx;
    		this.gridy = gridy;
    	}
     
    	/**
                    Construit yb GBC avec gridx, gridy, gridwidth, gridheight
                    et toutes les autres valeurs de GridBagConstraints définies sur la
                    valeur par défaut.
                    @param gridx La position de gridx
                    @param gridy La position de gridy
                    @param gridwidth L'étirement de cellule dans la direction x
                    @param gridheight L'étirement de cellule dans la direction y 
             */
    	public GBC(int gridx, int gridy , int gridwidth, int gridheight){
    		this.gridx = gridx;
    		this.gridy = gridy;
    		this.gridwidth = gridwidth;
    		this.gridheight = gridheight;
    	}
     
    	/**
                    Définit l'ancrage.
                    @param anchor La valeur de l'ancrage
                    @return this Objet pour une future modification
             */
    	public GBC setAnchor(int anchor){
    		this.anchor = anchor;
    		return this;
    	}
     
    	/**
                    Définit la direction de fill.
                    @param fill La direction de fill
                    @return this Objet pour une future modification
             */
    	public GBC setFill(int fill){
    		this.fill = fill;
    		return this;
    	}
     
    	/**
                    Définit les poids de cellule.
                    @param weightx Le poids de cellule dans la direction x
                    @param weighty Le poids de cellule dans la direction y
                    @return this Objet pour une future modification
             */
    	public GBC setWeight(double weightx, double weighty){
    		this.weightx = weightx;
    		this.weighty = weighty;
    		return this;
    	}
     
    	/**
                    Définit les insets de cette cellule.
                    @param distance L'espacement à utiliser dans toutes les directions             
                    @return this Objet pour une future modification
             */
    	public GBC setInsets(int distance){
    		this.insets = new Insets(distance,distance,distance,distance);
    		return this;
    	}
     
    	/**
                    Définit les insets de cette cellule.
                    @param haut L'espacement à utiliser en haut
                    @param gauche L'espacement à utiliser à gauche
                    @param bas L'espacement à utiliser en bas
                    @param droite L'espacement à utiliser à droite
                    @return this Objet pour une future modification   
             */
    	public GBC setInsets(int haut, int gauche,int bas, int droite){
    		this.insets = new Insets(haut,gauche, bas,droite);
    		return this;
    	}
     
    	/**
                    Définit le remplissage interne
                    @param ipadx Le remplissage interne dans la direction x
                    @param ipady Le remplissage interne dans la direction y
                    @return this Objet pour une future modification
             */
    	public GBC setIpads(int ipadx, int ipady){
    		this.ipadx = ipadx;
    		this.ipady = ipady;
    		return this;
    	}
    }

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    Parfait, l'affichage se fait maintenant!!


    Par contre mon actionListener ne fait mais rien du tout!

    Mais bon, je trouverais bien!

    PS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setPanImage(chooser.getSelectedFile().getPath());
    Je voulais mettre ca dans mon actionEvent lors du clic sur le bouton image et de la sélection de cette dernière, mais éclipse ne me dis pas quoi importer

  7. #7
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Citation Envoyé par keumlebarbare
    PS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setPanImage(chooser.getSelectedFile().getPath());
    Je voulais mettre ca dans mon actionEvent lors du clic sur le bouton image et de la sélection de cette dernière, mais éclipse ne me dis pas quoi importer
    Pour tout ce qui est import avec Eclipse, retient la commande CTRL+SHIFT+O, cela fait un import automatique. C'est très pratique !

Discussions similaires

  1. [GridBagLayout] Problème d'affichage
    Par papabury59 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 23/11/2014, 15h17
  2. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59
  3. [Kylix] problème d'affichage
    Par scalvi dans le forum EDI
    Réponses: 1
    Dernier message: 18/06/2003, 10h07
  4. Réponses: 1
    Dernier message: 06/03/2003, 11h57
  5. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43

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