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

2D Java Discussion :

Adapter taille JFrame à JPanel


Sujet :

2D Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut Adapter taille JFrame à JPanel
    Bonjour,

    Je cherche à savoir comment adapter la taille de ma JFrame en fonction de la taille de mon JPanel.
    Car lors de l'exécution de mon application la taille de mon Jpanel varie beaucoup mais la taille de ma fenêtre reste la même.

    merci

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Quel Layout utilises-tu ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut
    En fait j'utilise la version GUI Designer de NetBeans pour faire ma mise en forme.
    Voici le code généré pour les Layouts

    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
     
            javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
            jPanel1.setLayout(jPanel1Layout);
            jPanel1Layout.setHorizontalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 458, Short.MAX_VALUE)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel1Layout.createSequentialGroup()
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                                    .addGap(55, 55, 55)
                                    .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 324, Short.MAX_VALUE)
                                    .addGap(34, 34, 34)))
                            .addContainerGap())
                        .addGroup(jPanel1Layout.createSequentialGroup()
                            .addGap(56, 56, 56)
                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addGroup(jPanel1Layout.createSequentialGroup()
                                    .addGap(40, 40, 40)
                                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                            .addGap(45, 45, 45))))
            );
            jPanel1Layout.setVerticalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel1Layout.createSequentialGroup()
                            .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 49, Short.MAX_VALUE)
                            .addGap(48, 48, 48)
                            .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, 48, Short.MAX_VALUE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, 51, Short.MAX_VALUE)
                            .addGap(18, 18, 18)
                            .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, 81, Short.MAX_VALUE)
                            .addGap(36, 36, 36)
                            .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE)
                            .addGap(51, 51, 51)
                            .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 84, Short.MAX_VALUE))
                        .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addContainerGap())
            );

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Tu as posté le Layout du JPanel. Ce Layout sert pour les composants qui se trouvent DANS le JPanel. Pas pour placer le JPanel.

    Il faut regarder ce que tu as comme Layout pour le JFrame.
    Je suppose que si tu as placé le JPanel avec le GUI de NB, tu dois avoir dans la méthode "init" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
    A quelle occasion ton JPanel change de taille ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut
    Ou voilà j'ai bien ce code là :

    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
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(0, 0, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(0, 0, Short.MAX_VALUE))
            );
     
            pack();
    donc ça c'est bien le Layout de ma JFrame ?

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Oui c'est le Layout de ta JFrame.

    Bon, maintenant, il faut savoir quel évènement fait que ton JPanel change de taille
    et du coup, que ta JFrame doit aussi changer de taille ... (par ce que c'est bien ta question ?)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut
    Ah oui,

    Alors dans mon application j'ai un JLabel dans mon JPanel.
    Dans ce JLabel l'utilisateur peut importer l'image qu'il veut depuis son ordinateur en cliquant sur un bouton "Menu Item".
    C'est dans cette ActionListener que j'ai écris le code pour importer une image.

    Donc l'image importée peut être de tout type et de toute taille.
    Mon Jlabel s'adapte bien à la taille de l'image.
    Mon JPanel aussi.
    Mais pas la JFrame.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Avec ComponentListener on doit pouvoir s'adapter aux changements de taille du panel, quelque soit le layout à priori :

    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
    public class DemoJFrameAdaptSize {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JPanel panel = createResizablePanel();
    		frame.add(panel);
     
    		panel.addComponentListener(new ComponentAdapter() {
    			@Override
    			public void componentResized(ComponentEvent e) {
    				resize(frame, panel);
    			}
    		});
     
    		frame.pack();
    		panel.setPreferredSize(panel.getSize());
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
     
    	}
     
    	protected static void resize(JFrame frame, JPanel panel) {  
    			Dimension size = panel.getSize();
    			Insets insets = frame.getInsets();
     
    			size.width += insets.left + insets.right;
    			size.height += insets.top + insets.bottom;
     
    			frame.setSize(size);
    	}
     
    	private static JPanel createResizablePanel() {
    		JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
    		panel.setBorder(BorderFactory.createLineBorder(Color.RED, 3));
     
    		panel.setPreferredSize(new Dimension(100,100));
     
    		JPanel buttonPanel = new JPanel(new GridBagLayout());
     
    		GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(3,3,3,3), 0, 0);
     
    		BasicArrowButton decreaseHeight = new BasicArrowButton(BasicArrowButton.NORTH);
    		decreaseHeight.addActionListener(e-> decreaseHeight(panel));
    		gbc.gridx=1;
    		buttonPanel.add(decreaseHeight, gbc);
     
    		BasicArrowButton decreaseWidth = new BasicArrowButton(BasicArrowButton.WEST);
    		decreaseWidth.addActionListener(e-> decreaseWidth(panel));
    		gbc.gridx=0;
    		gbc.gridy=1;
    		buttonPanel.add(decreaseWidth, gbc);
     
    		BasicArrowButton increaseWidth = new BasicArrowButton(BasicArrowButton.EAST);
    		increaseWidth.addActionListener(e-> increaseWidth(panel));
    		gbc.gridx=2;
    		buttonPanel.add(increaseWidth, gbc);
     
    		BasicArrowButton increaseHeight = new BasicArrowButton(BasicArrowButton.SOUTH);
    		increaseHeight.addActionListener(e-> increaseHeight(panel));
    		gbc.gridx=1;
    		gbc.gridy=2;
    		buttonPanel.add(increaseHeight, gbc); 
     
    		buttonPanel.setMaximumSize(buttonPanel.getPreferredSize());
    		panel.add(buttonPanel);
     
    		return panel;
    	}
     
    	private static void decreaseHeight(JPanel panel) {
    		Dimension dimension = panel.getSize();
    		if ( dimension.height>32 ) {
    			dimension.height -= 10;
    			panel.setPreferredSize(dimension);
    			panel.setSize(dimension);
    			panel.revalidate();
    		}		
    	}
     
    	private static void increaseHeight(JPanel panel) {
    		Dimension dimension = panel.getSize();
    		if ( dimension.height<1024 ) {
    			dimension.height += 10;
    			panel.setPreferredSize(dimension);
    			panel.setSize(dimension);
    			panel.revalidate();
    		}		
    	}
     
    	private static void decreaseWidth(JPanel panel) {
    		Dimension dimension = panel.getSize();
    		if ( dimension.width>32 ) {
    			dimension.width -= 10;
    			panel.setPreferredSize(dimension);
    			panel.setSize(dimension);
    			panel.revalidate();
    		}		
    	}
     
    	private static void increaseWidth(JPanel panel) {
    		Dimension dimension = panel.getSize();
    		if ( dimension.width<1024 ) {
    			dimension.width += 10;
    			panel.setPreferredSize(dimension); 
    			panel.setSize(dimension);
    			panel.revalidate();
    		}		
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Après avoir intégré une image, il faut trouver la nouvelle taille du JPanel
    soit avec jPanel1.getSize()
    soit avec jPanel1.getPreferedSize()
    Dans les 2 cas tu récupères un objet Dimension que tu peux appliquer à ton JFrame avec :
    monJFrame.setPreferedSize(jPanel1.getPreferedSize());

    En principe, ton JFrame devra encore être un peu agrandi à cause des marges.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut
    Super ça marche bien avec JFrame.setPreferedSize(jPanel1.getPreferedSize());

    et le décalage des marges est bien c'est plus joli viseuellement.

    Merci à tous

Discussions similaires

  1. [Débutant]Taille du JPanel
    Par tinmarbusir dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 05/01/2007, 21h47
  2. JFrame JPanel et scope de variable
    Par yolepro dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 15/12/2006, 15h05
  3. adapter taille form a l'ecran
    Par ac/dc dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/11/2006, 14h45
  4. Mise a jour de l'affichage JFrame-JPanel
    Par aristeas dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 10/06/2006, 10h12
  5. adapter taille conteneur + taille max de ce conteneur
    Par grinder59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/02/2006, 15h19

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