Source de l'article : Passionné d'informatique Auteur : Zhang Jian
Qui sait combien de sable et de pierre ont été utilisées pour construire la Tour de Babel ? Qui sait combien de jours et de nuits il a fallu pour construire Rome ? La seule chose que nous savons, c’est que sans les briques et les pierres, il n’y aurait pas de Grande Muraille qui serpente sur des milliers de kilomètres ; sans l’accumulation de rochers et d’argile, il n’y aurait pas de pyramides éternelles. On voit que la préparation des connaissances de base est cruciale pour que nous puissions apprendre quoi que ce soit. Alors, commençons par comprendre quelques fonctions de base de Swing et commençons notre grand projet de construction de Rome !
Préface
Java Café est ouvert depuis longtemps. Si vous aimez déjà le goût de la tasse de café de Java, n'oubliez pas de venir souvent. Cette fois, nous avons préparé une grande tasse de café parfumé pour tout le monde - sur la base du développement d'un jeu "Lianliankan", nous apprendrons avec vous comment utiliser Swing en Java. Lorsque vous goûterez attentivement cette tasse de café, vous le ferez. J'ai découvert que non seulement Java avait une saveur unique pour ma tasse de café, mais que j'ai également appris à développer des jeux professionnels. C'est vraiment le meilleur des deux mondes !
Pour vous donner un aperçu, l'image ci-dessous est une capture d'écran du jeu. Vous pouvez télécharger le jeu pour l'essayer (télécharger le programme de jeu ; télécharger le fichier source), puis utiliser java -jar kyodai.jar pour l'exécuter en mode ligne de commande. De plus, vous pouvez également accéder à ma page d'accueil http://www.ismyway.com pour télécharger la version autonome et la version mobile de ce jeu pour un essai (voir Figure 1).
Java Cafe a déjà introduit la connaissance d'AWT, alors quelle est la différence entre Swing et AWT ? Quiconque étudie Java a peut-être entendu ou vu les termes contrôles lourds et contrôles légers. AWT est ce que nous appelons habituellement contrôles lourds, et Swing est un contrôle léger. Nous savons tous que le slogan de Java est "écrire une fois, exécuter n'importe où", ce qui exige également que nous utilisions autant que possible du code Java pur dans nos programmes. Malheureusement, AWT s'appuie sur une interface avec la plate-forme native, de sorte que les interfaces créées avec AWT peuvent être légèrement différentes selon les systèmes d'exploitation. Swing est complètement différent. Swing est écrit en Java pur. Par conséquent, l'interface écrite en Swing peut garantir la même apparence sur toutes les plateformes. Voici une autre astuce : dans le JDK, pour faciliter la différenciation, tous les contrôles Swing commencent par une lettre majuscule J, comme JButton (l'équivalent correspondant dans AWT est Button), afin que vous puissiez facilement distinguer les contrôles Swing des contrôles AWT.
Swing première expérience
Pour ceux qui souhaitent apprendre la programmation Swing, nous avons spécialement préparé pour vous quelques conseils. Tout d'abord, il est extrêmement nécessaire de télécharger et de lire le code. Puisqu'il s'agit d'un tutoriel sur Swing, nous essayons uniquement d'expliquer autant que possible certains contenus liés à Swing. Les contenus sans rapport avec Swing ne seront généralement pas couverts, comme la partie algorithme. Deuxièmement, en raison du manque d'espace, il est impossible d'écrire complètement chaque partie du code ici, vous devez donc également la comparer avec le code complet. Enfin, afin de permettre à chacun de se concentrer plus facilement sur l'apprentissage de Swing, nous avons également mis les ressources nécessaires au développement du jeu dans le fichier téléchargé. Après le téléchargement, vous pouvez le compiler et l'exécuter et voir les résultats de l'exécution.
1. Conteneur de niveau supérieur
Qu'est-ce qu'un conteneur de niveau supérieur ? Lorsque nous utilisons Java pour la programmation graphique, où sont dessinés les diagrammes ? Nous avons besoin d'un conteneur capable de fournir des graphiques. Ce conteneur est appelé conteneur de niveau supérieur. Vous pouvez également le considérer comme une fenêtre. Le conteneur de niveau supérieur constitue la base de la programmation graphique. Tous les éléments graphiques doivent être inclus dans le conteneur de niveau supérieur. Dans Swing, nous avons trois conteneurs de niveau supérieur qui peuvent être utilisés, à savoir :
・JFrame : utilisé pour concevoir des applications similaires au formulaire de fenêtre dans les systèmes Windows.
・JDialog : similaire à JFrame, sauf que JDialog est utilisé pour concevoir des boîtes de dialogue.
・JApplet : utilisé pour concevoir des applets Java pouvant être intégrées dans des pages Web.
Si nous devons utiliser Swing pour créer un programme de classe window, notre code devrait ressembler à ceci :
importer javax.swing.* ;
classe publique KyodaiUI
étend JFrame {
…
}
2.Contrôles
Les contrôles sont les éléments de base qui composent l'interface de l'application. Les boutons, les zones de texte, les barres de progression, etc. sont tous des contrôles. Les contrôles (ici nous ne discutons que des contrôles visuels) peuvent être divisés en contrôles conteneurs et contrôles non conteneurs. Littéralement, un contrôle conteneur est un contrôle spécial qui peut contenir d'autres contrôles. Par exemple, le contrôle JPanel en Java est un contrôle conteneur, tel que des boutons et des zones de texte. Vous pouvez même en placer non. -des contrôles de conteneur tels que des boutons et des zones de texte dans JPanel. Placez-y plusieurs contrôles JPanel (il convient de noter que le conteneur de niveau supérieur est également un contrôle de type conteneur. Chaque application de fenêtre a et ne peut avoir qu'un seul conteneur de niveau supérieur. En d’autres termes, le conteneur de niveau supérieur ne peut pas être inclus dans d’autres contrôles).
Il existe de nombreux contrôles conteneurs en Java En plus du JPanel que nous venons de mentionner, il existe également JTabbedPane, JScrollPane, etc. Les contrôles non conteneurs incluent JButton, JLabel, JTextField, etc. Si vous devez ajouter un contrôle à un contrôle de type conteneur, vous pouvez utiliser la méthode add(Component comp) pour y parvenir, par exemple :
Panneau JPanel = new JPanel();
Bouton JButton = nouveau JButton();
panel.add(bouton);
3. Disposition
Qu’est-ce que la mise en page ? Layout est un système de gestion d'interface utilisé en Java pour contrôler la disposition et la position des contrôles. Les personnes qui ont utilisé d'autres langages de développement de programmation visuelle auront toujours l'impression que la conception de l'interface Java est gênante lorsqu'ils entrent en contact avec elle : il n'existe pas de méthode WYSIWYG pour définir les coordonnées de contrôle ! Cependant, il s'avère que le système de gestion de mise en page fourni par Java lui-même peut également bien répondre à nos besoins et présente plus d'avantages en termes de performances multiplateformes.
Les mises en page couramment utilisées sont :
・BorderLayout : un système de gestion qui divise l'interface en zones supérieure, inférieure, gauche, droite et centrale. Dans la mise en page BorderLayout, vous ne pouvez placer qu'un maximum de 5 contrôles. S'il y a plus de 5 contrôles, il est recommandé de les utiliser. d'autres systèmes de mise en page.
・GridLayout : GridLayout est un système de gestion de mise en page qui découpe l'interface utilisateur en une disposition semblable à un échiquier. Si nous voulons concevoir un logiciel de calcul similaire à celui fourni avec Windows, GridLayout est sans aucun doute le meilleur choix.
・FlowLayout : FlowLayout est différent des deux types de systèmes de gestion de mise en page ci-dessus. Dans FlowLayout, vous n'avez pas besoin de spécifier où placer chaque contrôle. Il vous suffit d'ajouter les contrôles à FlowLayout, et FlowLayout les placera dans l'ordre en fonction. l'ordre dans lequel vous ajoutez les contrôles. Le contrôle sera automatiquement renvoyé s'il n'y a pas assez d'espace.
Après avoir acquis une compréhension de base de ces systèmes de gestion de mise en page, passons ensemble à la conception d'interfaces. Après avoir soigneusement observé les paramètres de "Lianliankan" dans les jeux QQ, nous pouvons constater que l'ensemble de l'interface est divisé en trois zones. La partie supérieure est la zone du menu système, la plus grande zone est la zone de jeu de l'utilisateur et il y a également une interaction utilisateur. zone. Zones, chaque zone est composée de plusieurs champs.
Avec autant de contrôles, par où commencer ? Étant donné que d’autres contrôles peuvent être placés dans le contrôle conteneur, il nous suffit de déterminer le contrôle conteneur à placer en premier. Maintenant que nous connaissons le nombre de contrôles de conteneurs que nous devons utiliser, passons à la sélection du système de gestion de mise en page. Utiliser GridLayout ? Cela semble un peu forcé, utiliser FlowLayout ? Existe-t-il une meilleure option ? En passant, je pense que vous avez dû penser à BorderLayout, comme le montre la figure 2 ci-dessous.
Avant de commencer, tout le monde doit faire attention au fait que la conception de l'interface doit d'abord prendre en compte la taille, qu'il s'agisse de la taille de l'interface principale du programme ou de la taille de chaque zone. Si la taille appropriée n'est pas conçue, elle sera très. pénible de le changer à l'avenir.
Voici le programme source correspondant :
importer java.awt.* ;
importer javax.swing.* ;
la classe publique KyodaiUI étend JFrame {
public KyodaUI() {
this.setSize(780, 500); //Définit la taille du formulaire à 780*500
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizing(false); //Le formulaire ne peut pas être redimensionné
this.setTitle("Lianliankan"); //Définir le titre
JPanel toolBar = new JPanel();
toolBar.setBackground(Color.white);
toolBar.setPreferredSize(nouvelle Dimension(780, 48));
JPanel actionPanel = new JPanel(); //Créer un nouveau contrôle de type JPanel
actionPanel.setBackground(Color.jaune); //Définir la couleur d'arrière-plan
actionPanel.setPreferredSize(new Dimension(160, 380)); //Définir la taille
JPanel contentPanel = new JPanel();
contentPanel.setBackground(Color.blue);
contentPanel.setPreferredSize (nouvelle dimension (620, 380));
this.getContentPane().add(toolBar, BorderLayout.NORTH);
this.getContentPane().add(actionPanel, BorderLayout.EAST);
this.getContentPane().add(contentPanel, BorderLayout.CENTER);
}
public static void main(String[] args) lance HeadlessException {
KyodaiUI kyodaiUI = nouveau KyodaiUI();
kyodaiUI.show();
}
}
Jetons un coup d'œil au fonctionnement du programme ci-dessus. Tout d'abord, extends JFrame indique qu'il est hérité de JFrame, qui est le contrôle de conteneur de niveau supérieur le plus basique. En fait, dans le JDK, les contrôles commençant par la lettre J sont des contrôles Swing. Définissez ensuite les propriétés du conteneur.Parmi eux, setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) est utilisé pour indiquer à la machine virtuelle Java de fermer le processus de fenêtre lorsque l'utilisateur clique sur le bouton "Fermer" dans le coin supérieur droit du formulaire. Si vous ne le faites pas, vous constaterez que même si vous pouvez cliquer pour fermer la fenêtre, le programme ne se ferme pas. Dans le code suivant, nous ajoutons trois conteneurs Panel au conteneur de niveau supérieur. A noter que dans AWT, on peut l'écrire directement sous la forme add(toolBar, BorderLayout.NORTH), mais dans Swing, il doit être écrit sous la forme getContentPane() add(toolBar, BorderLayout.NORTH), sinon le programme ira. faux.
Vous pouvez maintenant le compiler et l'exécuter pour voir s'il est identique à mon résultat d'exécution (voir Figure 3) ?
4. Frontière
Bien que nous utilisions différentes couleurs de premier plan pour distinguer les différentes zones, il n’y a aucun sens de hiérarchie. Ce sera beaucoup plus beau avec une bordure.
En Java, tous les contrôles Swing commençant par J peuvent utiliser la méthode setBorder pour définir eux-mêmes leurs bordures. Il existe de nombreux types de bordures, linéaires, surélevées, concaves et vides. Vous pouvez même les combiner librement pour créer votre propre style. Toutes les bordures doivent être créées à l'aide des méthodes statiques fournies dans javax.swing.BorderFactory, telles que :
Bordure bordure = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
nouvelleCouleur(45, 92, 162),
nouvelleCouleur(43, 66, 97),
nouvelleCouleur(45, 92, 162),
nouvelle couleur (84, 123, 200));
Maintenant, nous changeons toolBar.setBackground(Color.white) en toolBar.setBorder(border). L'effet tridimensionnel est-il déjà apparu ?
Combat pratique - écrivez votre propre nom
Nous avons désormais une interface fonctionnelle. Même si elle ne peut rien faire, pas de panique, Rome ne s'est pas construite en un jour.
Fournissons maintenant un menu « À propos » dans la zone de menu pour afficher les informations sur le programme. Ne voulez-vous pas que les autres connaissent votre nom ? Swing lui-même fournit un contrôle de bouton prêt à l'emploi, JButton. Il nous suffit de créer un nouveau bouton : JButton about = new JButton("about"); Comment ce bouton doit-il être placé dans la zone de menu plutôt qu'ailleurs ? Nous pouvons ajouter le code suivant : toolBar.add(about); Hé, pourquoi n'y a-t-il aucune réponse lorsque l'on clique sur le bouton ? C'est parce que vous n'avez pas indiqué au programme quoi faire lorsque vous cliquez sur le bouton. Pour ajouter une réponse d'événement à un bouton, vous devez d'abord utiliser about.addActionListener(this) pour indiquer au programme d'écouter les événements lorsque le bouton est enfoncé. Puisque ActionListener est une interface de programme, nous devons également faire un petit peu de travail. la déclaration de la classe. Modification : public class KyodaiUI extends JFrame Implements ActionListener {...} Le but de l'implémentation de l'interface ActionListener est d'indiquer au programme que je souhaite gérer les événements. Bien sûr, il faut enfin ajouter le code pour répondre à l'événement :
public void actionPerformed(ActionEvent e) {
if (e.getSource() == à propos) {
JOptionPane.showMessageDialog(this, "Mon nom", "À propos",
JOptionPane.INFORMATION_MESSAGE);
retour ;
}
}
Parmi eux, e.getSource() représente le contrôle qui déclenche actuellement l'événement. Puisqu'il y a souvent plus d'un contrôle dans notre programme, ces contrôles peuvent générer des événements, nous devons donc utiliser cette méthode pour trouver le contrôle qui a généré l'événement.
résumé
Passons en revue ce que nous avons appris aujourd'hui : Tout d'abord, nous comprenons le conteneur de niveau supérieur, et nous savons également que les contrôles sont divisés en contrôles conteneurs et contrôles non conteneurs. Nous savons également comment utiliser les bordures. Enfin, nous avons également traité des boutons. un petit événement.
Il va sans dire que vous apprenez et pratiquez au fur et à mesure, alors laissez-moi vous laisser quelques petits devoirs pour vous aider à consolider ce que vous avez appris aujourd'hui : le bouton que nous avons ajouté ci-dessus est au milieu de la barre de menu et n'est pas beau. Veuillez le mettre dans Essayez-le à gauche ou à droite.
Enfin, j'aimerais vous fournir de meilleurs documents de référence :
●Création d'une interface graphique avec JFC/Swing
http://java.sun.com/docs/books/tutorial/uiswing/index.html
●Graphiques 2D
http://java.sun.com/docs/books/tutorial/2d/index.html
API JDK
http://java.sun.com/j2se/1.4.2/docs/api/index.html