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 :

[GridBagLayout] Redimensionnement bizarre


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Par défaut [GridBagLayout] Redimensionnement bizarre
    Bonjour,

    J'ai créé une interface graphique pour mon application qui a l'allure que je veux, si je maximize la fenêtre tout se redimensionne comme je veux, mais si je restaure la fenêtre, ça donne n'importe quoi...

    ma fenêtre est composée d'un Gridbag à trois lignes, la deuxième étant elle même un gridbag deux lignes deux colonnes, comme ceci :
    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
     
    +-------------------------------------------------------+
    | Divers composants                                     |
    +-------------------------------------------------------+
    | +---------------------+-----------------------------+ |
    | | textpanel           | autre textpanel             | |
    | +---------------------+-----------------------------+ |
    | |                     |                             | |
    | | JList dans un       | Textarea                    | |
    | | JScrollPane         |                             | |
    | |                     |                             | |
    | +---------------------------------------------------+ |
    +-------------------------------------------------------+
    |                   un bouton                           |
    +------------------------------------------------------ +
    Lorsque je maximize puis restaure ma fenêtre, ou simplement lorsque je la redimensionne à la main, le textpanel de gauche et le jscrollpanel s'éffondrent sur une vingtaine de pixels de largeur... En essayant de changer quelques paramètres de taille préférée ou de poids des composants, il arrive que j'aie ce comportement dès le lancement, sans même redimensionner.
    Les autres composants s'affichent correctement.

    Quelqu'un a-t-il déjà vécu quelque chose de semblable et aurait une piste pour trouver l'origine de ce problème et sa solution ?

    Merci de votre aide,

  2. #2
    Membre expérimenté
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Par défaut
    Je viens de découvrir un fait qui me fait assez peur : le comportement n'est pas le même avec java5 ou java6 !

    Le problème est présent dans les deux cas (ouf), mais beaucoup moins important avec l'ancienne version : il n'apparait que lorsque je diminue la taille de la fenêtre, autrement tout se passe à merveille.


  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Par défaut
    Salut,

    lol les mystères du gridbaglayout. Personnellement je n'ai jamais eu ce genre de problème mais je pense qu'il doit y avoir un problème dans les contraintes.
    Montre nous un juste le code de positionnement pour qu'on puisse t'aider.

    a+

  4. #4
    Membre expérimenté
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Par défaut
    Voici le code de posisitionnement de la grille 2x2 :

    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 ResultPanel() {
     
    		GridBagConstraints resultsConstraints = new GridBagConstraints(); 
    		resultsConstraints.fill = GridBagConstraints.BOTH;
    		resultsConstraints.gridx = 0;
    		resultsConstraints.gridy = 0;
    		resultsConstraints.weightx = 1;
    		resultsConstraints.weighty = 0;
    		resultsConstraints.insets = new Insets(3, 10, 3, 3);
     
    		GridBagConstraints detailsConstraints = new GridBagConstraints(); 
    		detailsConstraints.fill = GridBagConstraints.BOTH;
    		detailsConstraints.gridx = 1;
    		detailsConstraints.gridy = 0;
    		detailsConstraints.weightx = 1;
    		detailsConstraints.weighty = 0;
    		detailsConstraints.insets = new Insets(3, 10, 3, 3);
     
    		GridBagConstraints listConstraints = new GridBagConstraints();
    		listConstraints.fill = GridBagConstraints.BOTH;
    		listConstraints.gridx = 0;
    		listConstraints.gridy = 1;
    		listConstraints.weightx = 1;
    		listConstraints.weighty = 1;
    		listConstraints.insets = new Insets(3, 3, 3, 3);
     
    		GridBagConstraints textAreaConstraints = new GridBagConstraints();
    		textAreaConstraints.fill = GridBagConstraints.BOTH;
    		textAreaConstraints.gridx = 1;
    		textAreaConstraints.gridy = 1;
    		textAreaConstraints.weightx = 1;
    		textAreaConstraints.weighty = 1;
    		textAreaConstraints.insets = new Insets(3, 3, 3, 3);
     
    		this.setLayout(new GridBagLayout());
    		this.add(getJTextPane(), resultsConstraints);
    		this.add(getJTextPane1(), detailsConstraints);
    		this.add(getJTextArea(), textAreaConstraints);
    		this.add(getScroller(), listConstraints); 
    	}
     
     
    	private JScrollPane getScroller() {
    		if(scroller == null) {
    			scroller = new JScrollPane(getJList(), 
    					JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
    					JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    			scroller.setPreferredSize(getJList().getPreferredSize());
    		}
    		return scroller;
    	}
     
    	private JTextPane getJTextPane() {
    		if (jTextPane == null) {
    			jTextPane = new TextPane("Résultats");
    			Dimension dim = new Dimension();
    			dim.height = 20;
    			dim.width = (int) (MainWindow.prefSize.width * 0.25);
    			jTextPane.setPreferredSize(dim);
    		}
    		return jTextPane;
    	}
     
    	private JTextPane getJTextPane1() {
    		if (jTextPane1 == null) {
    			jTextPane1 = new TextPane("Détails");
    			Dimension dim = new Dimension();
    			dim.height = 20;
    			dim.width = (int) (MainWindow.prefSize.width * 0.25);
    			jTextPane.setPreferredSize(dim);
    		}
    		return jTextPane1;
    	}
     
    	private JTextArea getJTextArea() {
    		if (jTextArea == null) {
    			jTextArea = new JTextArea();
    			jTextArea.setEditable(false);
    			jTextArea.setLineWrap(true);
    			jTextArea.setWrapStyleWord(true);
    			Dimension dim = new Dimension();
    			dim.height = (int) (MainWindow.prefSize.height * coefHauteur);
    			dim.width = (int) (MainWindow.prefSize.width * 0.55);
    			jTextArea.setPreferredSize(dim);
    		}
    		return jTextArea;
    	}
     
    	private JList getJList() {
    		if (jList == null) {
    			jList = new JList();
    			Dimension dim = new Dimension();
    			dim.height = (int) (MainWindow.prefSize.height * coefHauteur);
    			dim.width = (int) (MainWindow.prefSize.width * 0.35);
    			jList.setPreferredSize(dim);
    			initiallistHeight = dim.height; 
    			jList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    			jList.addListSelectionListener(new ListSelectionListener() {
     
    				public void valueChanged(ListSelectionEvent e) {
    					Result r = (Result) jList.getSelectedValue();
    					getJTextArea().setText(afficheResultat(r));
    				}
     
    			});
    		}
    		return jList;
    	}
    Avec ce code, le problème apparait dès le lancement chez moi.

    Merci de votre aide,

  5. #5
    Membre expérimenté
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Par défaut
    Finalement j'ai aussi eu besoin de mettre le JTextArea dans un scroller, et cela a résolu le problème

    Donc je déleste le message, mais je suis toujours preneur d'une explication (j'ai le droit de rêver).

  6. #6
    Membre émérite
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Par défaut
    j'ai pas tout compris dans ton probleme.
    deja tu as des probleme dans tes poids. je comprend pas pourquoi tu as plusieurs fois des poids a 1 :-S
    en plus il faut mieux eviter autant que possible de mettre des preferedsize sur les composants. laisse le l&f ou le layout manager s'en charger pour toi :-)


    explique ton probleme ou montre un petit code qui met en evidence ton probleme et on poura t'expliquer pourquoi tu as ce probleme.

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

Discussions similaires

  1. [GridBagLayout] Redimensionnement des composants
    Par Invité dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 15/11/2013, 23h27
  2. Redimensionner avec GridBagLayout
    Par Anduriel dans le forum Débuter
    Réponses: 2
    Dernier message: 05/12/2011, 12h34
  3. Réponses: 1
    Dernier message: 19/11/2009, 11h12
  4. Problème GridBagLayout et redimensionnement fenetre
    Par Perbugi dans le forum Débuter
    Réponses: 2
    Dernier message: 29/09/2009, 15h53
  5. Redimensionnement des Paquets IP sur un Réseau Local
    Par Bonoboo dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 15h40

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