J'essaie de travailler avec des gestionnaires de disposition pour la première fois, et ils me donnent des coups de pied dans les dents. J'essaie de faire une image de fond et ensuite mettre des boutons sur le dessus, en utilisant GridBagLayout, s'il y a un meilleur layoutmanager, s'il vous plaît dites-le. Quant à essayer d'apprendre à utiliser les gestionnaires de mise en page, ses références très difficiles et tout apprentissage seraient également très appréciés. C'est ce qu'il ressemble à l'heure actuelle, je peux Préparons le cadre pour afficher l'image complète, mais quand j'utiliser le gestionnaire GridLayout, il le faitComment mettre une image de fond sur GridBagLayout
public void addComponentsToPane(Container pane){
BackgroundImage image = new BackgroundImage();
JButton button1, button2, button3, button4, button5;
pane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
if(shouldFill){
c.fill = GridBagConstraints.NONE;
}
button1 = new JButton("Button 1");
if (shouldWeightX) {
c.weightx = 0.5;
}
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridy = 0;
button1.setOpaque(false);
pane.add(button1, c);
button2 = new JButton("Button 2");
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 0;
c.gridy = 0;
button2.setOpaque(false);
pane.add(button2, c);
button3 = new JButton("Button 3");
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0.5;
c.gridx = 2;
c.gridy = 0;
button3.setOpaque(false);
pane.add(button3, c);
button4 = new JButton("Long-Named Button 4");
c.fill = GridBagConstraints.HORIZONTAL;
c.ipady = 40; //make this component tall
c.weightx = 0.0;
c.gridwidth = 3;
c.gridx = 0;
c.gridy = 1;
pane.add(button4, c);
button5 = new JButton("button 1");
c.fill = GridBagConstraints.HORIZONTAL;
c.ipady = 0; //reset to default
c.weighty = 1.0; //request any extra vertical space
c.anchor = GridBagConstraints.PAGE_END; //bottom of space
c.insets = new Insets(10,0,0,0); //top padding
c.gridx = 1; //aligned with button 2
c.gridwidth = 2; //2 columns wide
c.gridy = 2; //third row
pane.add(button5, c);
c.ipadx = 800;
c.ipady = 400;
pane.add(image, c);
}
C'est ce que je suis en train de faire ressembler
Quelle est la raison de la méthode OverPiding mainPanel, getPreferredSize? Est-ce une solution efficace? Aussi, quels sont les encarts? – Loligans
Le composant sert vraiment à deux fins, 1) pour afficher une image et 2) en tant que conteneur pour contenir divers composants. La taille préférée du composant a donc été modifiée pour utiliser les plus grandes valeurs de hauteur ou de largeur de la taille préférée de 1 ou 2. – camickr
@Loligans Raison du remplacement de prefsize: voir l'explication de camickr (oui c'est efficace). Insets est le remplissage externe du composant (voir 'GridBagConstraint' javadoc). –