Java Swing - Composite et GridLayout Marges/Rembourrage
Je suis en train de travailler sur la construction d'un jeu d'échecs en Java, et je suis en train d'avoir un peu de mal à obtenir le GUI exactement comme je le veux avec Swing. Je suis à l'aide d'un GridLayout
d'organiser une grille de 8x8 ChessButton
s (qui remplacent les JButton
afin que je puisse stocker des informations supplémentaires à l'intérieur d'eux comme des coordonnées). À l'origine, le ChessButton
s n'apparaîtra pas à moins que je on passe la souris au-dessus d'eux, mais j'ai résolu le problème en plaçant chaque ChessButton
à l'intérieur d'un distinct JPanel
et le réglage de chaque bouton setPreferredSize()
à un ensemble de hauteur et de largeur.
Maintenant, mon problème est qu'il semble y avoir une petite marge ou de rembourrage ci-dessus (et/ou en dessous?) chaque bouton. J'ai fait en sorte de jeu de setHgap(0)
et setVgap(0)
pour la GridLayout
, donc je suis sûr que le mystérieux marge est en provenance soit le ou les boutons de JPanel
s. Mais, je n'arrive pas à se débarrasser d'eux, et ils semblent être à l'origine de chaque ChessButton
pour décaler un peu vers le haut/vers le bas chaque fois que je souris.
Je me rends compte de cette description du problème est peut-être un peu de mal à visualiser, donc j'ai pris une capture d'écran (à l'aide de JButton
s plutôt que de ChessButton
s ainsi, les écarts sont un peu plus faciles à reconnaître): http://img3.imageshack.us/img3/6656/jbuttonmargins.png
Voici le code que j'ai utilisé pour initialiser chaque ChessButton
:
chessBoard = new JPanel(new GridLayout(8, 8, 0, 0));
chessBoard.setBorder(BorderFactory.createEmptyBorder());
for (int i = 0; i <= 65; i++) {
//Create a new ChessButton
ChessButton button = new ChessButton("hi");
button.setBorder(BorderFactory.createEmptyBorder());
button.setPreferredSize(new Dimension(75, 75));
button.setMargin(new Insets(0, 0, 0, 0));
//Create a new JPanel that the ChessButton will go into
JPanel buttonPanel = new JPanel();
buttonPanel.setPreferredSize(new Dimension(75, 75));
buttonPanel.setBorder(BorderFactory.createEmptyBorder());
buttonPanel.add(button);
//Add the buttonPanel to the grid
chessBoard.add(buttonPanel);
}
Alors, comment puis-je me débarrasser de ces vertical espaces entre les boutons? Je suis relativement nouveau à Swing, donc je suis désolé si la réponse est extrêmement évident, mais j'apprécierais toute aide que n'importe qui pourrait ont à offrir! Merci à l'avance!
OriginalL'auteur dwat | 2010-12-02
Vous devez vous connecter pour publier un commentaire.
Qui n'est pas la bonne solution. Il n'y a pas de raison d'utiliser un Composite à maintenir les boutons. En fait, c'est probablement la cause du problème. Les boutons ne s'affichent lorsque vous les ajoutez à un GridLayout. Si ils n'apparaissent pas c'est probablement parce que vous avez ajouté les boutons de l'interface graphique après avoir fait le GUI visible. Les composants doivent être ajoutés à l'interface graphique AVANT de les rendre visibles.
Je ne comprends pas pourquoi il n'y a pas un écart horizontal. Lorsque vous créez un Composite, par défaut il utilise un FlowLayout qui contient également une horizontale/verticale de l'écart de 5 pixels. Donc, je comprends pourquoi vous pourriez avoir l'écart vertical de 10 pixels. Je ne comprends pas pourquoi il n'y a pas d'écart horizontal.
Si vous avez besoin de plus d'aide pour poster votre SSCCE montrant le problème. Et le SSCCE doit utiliser régulièrement JButtons. Obtenir les bases de travail avec des composants standard avant de commencer à jouer avec des composants personnalisés. De cette façon, vous savez si le problème est avec votre code personnalisé ou non.
GridLayout
sans lacunes.OriginalL'auteur camickr
Ne pas ajouter un vide frontière; utilisez
setBorderPainted(false)
.Addendum: Comme @camickr notes, le comité de mise en page peut inclure par défaut lacunes. L'exemple ci-dessous utilise pas de gap
GridLayout
en conséquence.OriginalL'auteur trashgod
Essayez d'ajouter de l'échiquier.setPreferredSize(600, 600) pour créer un Composite pour le conseil d'administration qui ne dispose que de salle pour s'adapter à l'boutons (8 boutons pour chaque voie * 75 taille dans chaque sens sur les boutons).
OriginalL'auteur Patrick Gombert