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
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
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/
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()) );
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" :
A quelle occasion ton JPanel change de taille ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout);
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/
Ou voilà j'ai bien ce code là :
donc ça c'est bien le Layout de ma JFrame ?
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();
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/
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.
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.
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/
Super ça marche bien avec JFrame.setPreferedSize(jPanel1.getPreferedSize());
et le décalage des marges est bien c'est plus joli viseuellement.
Merci à tous
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager