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

Agents de placement/Fenêtres Java Discussion :

[JFrame] Redimensionnement Fenêtre (GridBag)Layout


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut [JFrame] Redimensionnement Fenêtre (GridBag)Layout
    Bonjour,

    Je vais essayé d'être le plus explicite possible, mon problème est un peu complexe à faire comprendre même si au final l'idée est simpliste.

    I - Mon objectif
    II - Ma première ébauche
    III - Mes différents problèmes

    I - Mon objectif : une fenêtre de ce type.

    Le principe serait d'avoir une fenêtre en plein écran, avec un menu dans une jframe principale. En dessous de ce menu trois panels, un à gauche prenant toute la hauteur disponible mais sur 1/3 de la largeur de la fenêtre, puis deux panels prenant chacun 2/3 de largeur et la moitié de la hauteur par défaut.
    Et enfin un séparateur entre le panel haut et bas permettant de les redimensionner sur leur hauteur au profit de l'autre (par exemple le panel du haut prend 90% de la hauteur et celui du bas le reste de la hauteur mais leurs largeurs ne changent pas).

    Un dessin vaut mieux qu'un long discours : Fenêtre

    II - Ma première ébauche :

    Tout d'abord cette ébauche est le fruit de nombreuse recherche de ma part puisque je ne maitrisais que très peu ces différents éléments(utilisation très simpliste), concernant GridBagLayout, le redimensionnement de fenêtre, les événements windowlistener, windowstatelistener, componentlistener, les autres types de layout possibles dans mon cas, etc . . .

    Un petit résumé de ce que j'ai implémenté.
    Tout d'abord aucun problème sur le menu. Deuxièmement j'ai mis en place le gridbaglayout (le code suivra) pour mes trois éléments. J'ai ensuite mis à l'initialisation de la fenêtre une dimension pour que chaque panel prennent la place que je souhaitais en effet ils prenaient la plus petite place possible.

    Je préfère mettre le code après avoir expliqué mes problèmes.

    III - Mes différents problèmes :

    Mon problème se trouve dans le gridbaglayout, si un panel vient à contenir un texte trop grand ou autre le gridbag fais n'importe quoi sans mes setMaxsize etc ...

    Le problème avec ces fonctions c'est que le redimensionnement se passe très mal, les panels ne gardent plus les proportions que je leur fixe et ce même après l'avoir fixé dans l'événement windowstatechanged. Au final j'ai donc des panels qui partent en vrille quand on redimensionnement.

    Concernant la barre de redimensionnement, je ne m'y suis pas encore penché étant donné que je n'arrive même pas à avoir une interface avec mes trois panels bien fixés à leurs positions.

    Les parties en relation dans mon code.

    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
    public static void main(String[] args) 
    	{
    		final App frame = new App();
     
    ...
     
    		// Fenetre principale
    		frame.setTitle("LAC 981");
     
    		Image icone = Toolkit.getDefaultToolkit().getImage("images/lac.png");
     
    		frame.setIconImage(icone);
     
    		// full screen
    		frame.setSize(800, 600); //si la fenêtre est rétrécis elle prendra cette résolution en première valeur
     
    		JFrame.setDefaultLookAndFeelDecorated(false);
     
    		frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
     
    		// barre des menus
     
    		....
     
     
    		//mise en place des éléments
    		GridBagLayout layout = new GridBagLayout();
     
    		frame.setLayout(layout);
     
    		final JPanel gauche = new JPanel();
    		gauche.setBorder(BorderFactory.createLineBorder(Color.red));
    		gauche.setMaximumSize(new Dimension(frame.getToolkit().getScreenSize().width/3,frame.getToolkit().getScreenSize().height));
    		gauche.setMinimumSize(new Dimension(frame.getToolkit().getScreenSize().width/3,frame.getToolkit().getScreenSize().height));
    		gauche.setPreferredSize(new Dimension(frame.getToolkit().getScreenSize().width/3,frame.getToolkit().getScreenSize().height));
    		gauche.add(new JLabel("Gauche"));
     
    		final JPanel haut = new JPanel();
    		haut.setBorder(BorderFactory.createLineBorder(Color.green));
    		haut.setMaximumSize(new Dimension(2*(frame.getToolkit().getScreenSize().width/3),frame.getToolkit().getScreenSize().height/2));
    		haut.setMinimumSize(new Dimension(2*(frame.getToolkit().getScreenSize().width/3),frame.getToolkit().getScreenSize().height/2));
    		haut.setPreferredSize(new Dimension(2*(frame.getToolkit().getScreenSize().width/3),frame.getToolkit().getScreenSize().height/2));
    		haut.add(new JLabel("Haut"));
     
    		final JPanel bas = new JPanel();
    		bas.setMaximumSize(new Dimension(2*(frame.getToolkit().getScreenSize().width/3),frame.getToolkit().getScreenSize().height/2));
    		bas.setMinimumSize(new Dimension(2*(frame.getToolkit().getScreenSize().width/3),frame.getToolkit().getScreenSize().height/2));
    		bas.setPreferredSize(new Dimension(2*(frame.getToolkit().getScreenSize().width/3),frame.getToolkit().getScreenSize().height/2));
    		bas.setBorder(BorderFactory.createLineBorder(Color.cyan));
    		bas.add(new JLabel("Bas"));
     
    		 GridBagConstraints c5 = new GridBagConstraints();
    	      c5.gridx = 0;
    	      c5.gridy = 0;
    	      c5.gridwidth = 1;
    	      c5.gridheight = 2;
    	      c5.anchor = GridBagConstraints.CENTER;
    	      c5.weightx = 100;
    	      c5.weighty = 100;
    	      frame.add(gauche,c5);
     
    	      GridBagConstraints c6 = new GridBagConstraints();
    	      c6.gridx = 1;
    	      c6.gridy = 0;
    	      c6.gridwidth = 2;
    	      c6.gridheight = 1;
    	      c6.anchor = GridBagConstraints.CENTER;
    	      c6.weightx = 100;
    	      c6.weighty = 100;
    	      frame.add(haut,c6);
     
    	      GridBagConstraints c7 = new GridBagConstraints();
    	      c7.gridx = 1;
    	      c7.gridy = 1;
    	      c7.gridwidth = 2;
    	      c7.gridheight = 1;
    	      c7.fill = GridBagConstraints.CENTER;
    	      c7.weightx = 100;
    	      c7.weighty = 100;
    	      frame.add(bas,c7);
     
    	    //redimensionnement
    	    frame.addWindowStateListener(new WindowAdapter() 
          	{   
    		    	  	@Override
    					public void windowStateChanged(WindowEvent e) 
    					{
    						gauche.setMaximumSize(new Dimension(frame.getWidth()/3,frame.getHeight()));
    						gauche.setMinimumSize(new Dimension(frame.getWidth()/3,frame.getHeight()));
    						gauche.setPreferredSize(new Dimension(frame.getWidth()/3,frame.getHeight()));
    						haut.setMaximumSize(new Dimension(2*(frame.getWidth()/3),frame.getHeight()/2));
    						haut.setMinimumSize(new Dimension(2*(frame.getWidth()/3),frame.getHeight()/2));
    						haut.setPreferredSize(new Dimension(2*(frame.getWidth()/3),frame.getHeight()/2));
    						bas.setMaximumSize(new Dimension(2*(frame.getWidth()/3),frame.getHeight()/2));
    						bas.setMinimumSize(new Dimension(2*(frame.getWidth()/3),frame.getHeight()/2));
    						bas.setPreferredSize(new Dimension(2*(frame.getWidth()/3),frame.getHeight()/2));
    					}
          	});
     
    	    //action fermeture
    		...
     
     
    		frame.validate();
     
    		frame.setVisible(true);
     
    	}
    Alors je me tourne vers vous :

    Mon choix de layout est - il mauvais ?

    Je ne trouve pas de meilleur moyen de gérer les redimensionnements, en avez vous un ?

    Avez vous tous simplement une meilleur piste pour moi ou une idée me permettant d'obtenir ma fenêtre ?

    Je suis prêt à répondre à toutes vos questions.

    N'hésitez pas à proposer vos idées !
    Merci

  2. #2
    Invité de passage
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1
    Par défaut
    Désolé de remonter un post un peu vieux mais as tu trouvé une solution ?

Discussions similaires

  1. redimensionnement d'un gridbag layout
    Par lvr dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 25/11/2009, 11h32
  2. redimensionnement fenêtre
    Par Triomen dans le forum Windows
    Réponses: 6
    Dernier message: 08/02/2005, 00h54
  3. [JFrame] Jolie fenêtre de lancement...
    Par Regis.C dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 27/01/2005, 17h17
  4. [JFrame] Redimensionnement et Drag Mode
    Par Quentin dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 01/12/2004, 23h12
  5. [BPW] Affichage clignotant lors de redimensionnement fenêtre
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 24/04/2004, 00h01

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