Création d'une interface graphique d'échecs Swing robuste et redimensionnable
Cet article traite de la conception et de la mise en œuvre d'une interface graphique d'échecs basée sur Swing robuste et redimensionnable. Le cahier des charges défini par l'équipe de conception utilisateur prévoit :
- Une barre d'outils avec des boutons pour les actions courantes du jeu
- Une zone réservée à une utilisation future
- Un échiquier qui reste carré tout en remplissant l'espace disponible
- Indicateurs d'accessibilité du clavier et de mise au point pour les échecs pièces
Détails de mise en œuvre
Les techniques suivantes ont été utilisées pour obtenir la fonctionnalité souhaitée :
-
Panneau pour les échecs Échiquier : Un GridLayout 9x9 est utilisé pour créer l'échiquier, avec la première cellule réservée à une étiquette sans texte.
-
Tableau de boutons séparé : Pour simplifier la logique du jeu, un tableau de boutons 8x8 est conservé séparément.
-
Boutons pour la fonctionnalité du clavier : Boutons sont utilisés pour les carrés de l'échiquier, permettant les interactions clavier et souris. La suppression des marges leur permet de se réduire à la taille de l'icône.
-
GridBagLayout pour Square Board : L'échiquier est ajouté à un GridBagLayout en tant que seul composant sans contraintes spécifiées, en le centrant. Pour conserver les dimensions carrées, l'échiquier interroge la taille du composant parent et renvoie une taille préférée qui est le plus grand carré possible sans dépasser la plus petite largeur ou hauteur du parent.
-
Images pour les pièces d'échecs : Les images des pièces d'échecs sont obtenues et stockées dans un tableau bidimensionnel.
Échantillon Code
L'extrait de code suivant montre l'initialisation des images de l'échiquier et des pièces d'échecs :
for (int ii = 0; ii < 8; ii++) {
for (int jj = 0; jj < 8; jj++) {
chessBoardSquares[ii][jj] = new JButton();
// Remove button margin to allow shrinking to icon size
chessBoardSquares[ii][jj].setMargin(new Insets(0, 0, 0, 0));
chessBoardSquares[ii][jj].setIcon(new ImageIcon(
new BufferedImage(64, 64, BufferedImage.TYPE_INT_ARGB)));
if ((jj % 2 == 1 && ii % 2 == 1)
|| (jj % 2 == 0 && ii % 2 == 0)) {
chessBoardSquares[ii][jj].setBackground(Color.WHITE);
} else {
chessBoardSquares[ii][jj].setBackground(Color.BLACK);
}
}
}
createImages();
Copier après la connexion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!