Comment puis-je centrer correctement un JPanel (FIXED SIZE) dans un JFrame?
Salut à tous!
Je suis en train de résoudre un -en apparence - un problème simple, mais je ne peux pas le fixer.
Je suis en train de travailler sur un exemple d'application avec Java/Swing bibliothèques;
J'ai une JFrame et un Composite.
Je veux juste atteindre les objectifs suivants:
- Composite DOIT être centré à l'intérieur de la JFrame.
- Composite DOIT ont TOUJOURS la taille est spécifiée avec
setPreferredSize() la méthode. Il ne DOIT PAS être redimensionnée en vertu de cette taille.
J'ai essayé en utilisant un GridBagLayout: c'est le SEULEMENT façon je peux le faire.
Voir l'exemple ci-dessous:
/* file StackSample01.java */
import java.awt.*;
import javax.swing.*;
public class StackSample01 {
public static void main(String [] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(100, 100));
panel.setBackground(Color.RED);
frame.setLayout(new GridBagLayout());
frame.add(panel, new GridBagConstraints());
frame.setSize(new Dimension(200, 200));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Ici une capture d'écran:
Je ne voudrais pas utiliser un GridBagLayout pour faire une chose aussi simple.
J'ai essayé la solution la plus simple, en utilisant une Boîte, mais cela ne fonctionne pas:
Exemple de code:
/* file StackSample02.java */
import java.awt.*;
import javax.swing.*;
public class StackSample02 {
public static void main(String [] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(100, 100));
panel.setBackground(Color.RED); //for debug
panel.setAlignmentX(JComponent.CENTER_ALIGNMENT); //have no effect
Box box = new Box(BoxLayout.Y_AXIS);
box.add(Box.createVerticalGlue());
box.add(panel);
box.add(Box.createVerticalGlue()); //causes a deformation
frame.add(box);
frame.setSize(new Dimension(200, 200));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Ici une capture d'écran,
Des idées? Merci à tous 🙂
source d'informationauteur IT.
Vous devez vous connecter pour publier un commentaire.
BoxLayout peut assez pour tenir vos setXxxSize(), puis il suffit d'ajouter
panel.setMaximumSize(new Dimension(100, 100));
et votre sortie serait
Supprimé par setMinimumSize(avis si le Conteneur a une plus grande taille que ... )
Tout d'abord, merci à tous.
Je réponds une fois de plus à ma propre question, de montrer à chacun le choix que j'ai fait.
Voir l'exemple de code ci-dessous;
Comme vous pouvez le voir, j'ai compris que d'un minimum de mesures, qui sont absolument nécessaires pour atteindre l'objectif.
Ici vous pouvez voir une capture d'écran.
Le problème est résolu.
Encore un grand merci à tous.
IL
créer un groupe par le nom de "FixedPanel" avec GridBagLayout et réglez la taille à la taille du cadre
ajoutez ensuite votre image en FixedPanel.
Vous pouvez le faire. J'ai eu à faire un jeu d'échecs, et je voulais la pièce du jeu d'échecs morceau de toujours aller dans le centre de la cellule qui a été un JlayeredPane:
Sa Juste Avoir
composite.setBounds(x, y, 1046, 503);
Où x est l'espace pour le côté droit et y est l'espace pour le côté gauche.
vous devez calculer l'espace de part et d'autre en fonction de la hauteur de l'écran et la largeur
utilisation
à la place?