Quelle des Artikels: Computer Enthusiast Autor: Zhang Jian
Wer weiß, wie viel Sand und Steine für den Bau des Turmbaus zu Babel verwendet wurden? Wer weiß, wie viele Tage und Nächte es dauerte, Rom zu bauen? Das Einzige, was wir wissen, ist, dass es ohne die Ziegel und Steine keine Große Mauer gäbe, die sich Tausende von Kilometern windet, ohne die Ansammlung von Felsbrocken und Lehm, und dass es keine ewigen Pyramiden gäbe. Es ist ersichtlich, dass die Vorbereitung von Grundkenntnissen entscheidend ist, damit wir etwas lernen können. Beginnen wir also damit, einige grundlegende Funktionen von Swing zu verstehen und beginnen wir mit unserem großartigen Projekt, Rom aufzubauen!
Vorwort
Das Java Café ist schon seit langem geöffnet. Wenn Sie bereits den Geschmack von Javas Kaffee mögen, denken Sie daran, öfters vorbeizukommen. Dieses Mal haben wir eine große Tasse duftenden Kaffee für alle vorbereitet – basierend auf der Entwicklung eines „Lianliankan“-Spiels werden wir mit Ihnen lernen, wie man Swing in Java verwendet. Wenn Sie diese Tasse Kaffee sorgfältig probieren, werden Sie es tun entdeckte, dass Java nicht nur einen einzigartigen Kaffeegeschmack hat, sondern ich habe auch gelernt, wie man professionelle Spiele entwickelt. Es ist wirklich das Beste aus beiden Welten!
Um Ihnen einen kleinen Vorgeschmack zu geben, ist das Bild unten ein Screenshot des Spiels. Sie können das Spiel zum Ausprobieren herunterladen (Spielprogramm herunterladen, Quelldatei herunterladen) und es dann mit java -jar kyodai.jar im Befehlszeilenmodus ausführen. Darüber hinaus können Sie auch auf meine Homepage http://www.ismyway.com gehen, um die Standalone-Version und die mobile Version dieses Spiels zum Testen herunterzuladen (siehe Abbildung 1).
Java Cafe hat das Wissen über AWT bereits eingeführt. Was ist also der Unterschied zwischen Swing und AWT? Jeder, der Java studiert, hat vielleicht die Begriffe Heavyweight Controls und Lightweight Controls gehört oder gesehen. AWT ist das, was wir normalerweise als Heavyweight Controls bezeichnen, und Swing ist ein Lightweight Control. Wir alle wissen, dass der Slogan von Java „Einmal schreiben, überall ausführen“ lautet. Dies erfordert auch, dass wir in unseren Programmen so viel reinen Java-Code wie möglich verwenden. Leider ist AWT auf eine Schnittstelle zur nativen Plattform angewiesen, sodass mit AWT erstellte Schnittstellen auf verschiedenen Betriebssystemen möglicherweise etwas anders aussehen. Swing ist völlig anders. Swing ist in reinem Java geschrieben. Daher kann die in Swing geschriebene Schnittstelle auf allen Plattformen das gleiche Erscheinungsbild gewährleisten. Hier ist ein weiterer Trick: Im JDK beginnen zur einfachen Unterscheidung alle Swing-Steuerelemente mit einem Großbuchstaben J, z. B. JButton (das entsprechende Äquivalent in AWT ist Button), sodass Sie Swing-Steuerelemente leicht von AWT-Steuerelementen unterscheiden können.
Erste Swing-Erfahrung
Für diejenigen, die Swing-Programmierung lernen möchten, haben wir speziell einige Tipps für Sie vorbereitet. Zunächst ist es unbedingt erforderlich, den Code herunterzuladen und zu lesen. Da es sich um ein Tutorial zu Swing handelt, versuchen wir nur, einige Swing-bezogene Inhalte so weit wie möglich zu erklären. Inhalte, die nichts mit Swing zu tun haben, werden im Allgemeinen nicht behandelt, wie zum Beispiel der Algorithmus-Teil. Zweitens ist es aus Platzgründen nicht möglich, jeden Teil des Codes hier vollständig zu schreiben, sodass Sie ihn auch mit dem vollständigen Code vergleichen müssen. Um es allen zu erleichtern, sich auf das Erlernen von Swing zu konzentrieren, haben wir auch die für die Spieleentwicklung erforderlichen Ressourcen in die Download-Datei eingefügt. Nach dem Herunterladen können Sie es kompilieren, ausführen und die Ausführungsergebnisse sehen.
1. Container der obersten Ebene
Was ist ein Top-Level-Container? Wo werden die Diagramme gezeichnet, wenn wir Java für die Grafikprogrammierung verwenden? Wir benötigen einen Container, der Grafikzeichnungen bereitstellen kann. Dieser Container wird als Container der obersten Ebene bezeichnet. Sie können ihn sich auch als Fenster vorstellen. Der Top-Level-Container ist die Basis für die Grafikprogrammierung. Alle grafischen Dinge müssen im Top-Level-Container enthalten sein. In Swing haben wir drei Container der obersten Ebene, die verwendet werden können:
・JFrame: Wird zum Entwerfen von Anwendungen verwendet, die der Fensterform in Windows-Systemen ähneln.
・JDialog: Ähnlich wie JFrame, mit der Ausnahme, dass JDialog zum Entwerfen von Dialogfeldern verwendet wird.
・JApplet: Wird zum Entwerfen von Java-Applets verwendet, die in Webseiten eingebettet werden können.
Wenn wir Swing verwenden müssen, um ein Fensterklassenprogramm zu erstellen, sollte unser Code so aussehen:
import javax.swing.*;
öffentliche Klasse KyodaiUI
erweitert JFrame {
…
}
2.Kontrollen
Steuerelemente sind die Grundelemente, aus denen die Anwendungsoberfläche besteht. Schaltflächen, Textfelder, Fortschrittsbalken usw. sind alle Steuerelemente. Steuerelemente (hier diskutieren wir nur visuelle Steuerelemente) können in Container-Steuerelemente und Nicht-Container-Steuerelemente unterteilt werden. Im wahrsten Sinne des Wortes ist ein Container-Steuerelement ein spezielles Steuerelement, das andere Steuerelemente enthalten kann. In Java können wir beispielsweise Nicht-Container-Steuerelemente wie Schaltflächen und Textfelder platzieren -Container-Steuerelemente wie Schaltflächen und Textfelder in JPanel. Platzieren Sie mehrere JPanel-Steuerelemente darin (es ist zu beachten, dass der Container der obersten Ebene auch ein Containertyp-Steuerelement ist. Jede Fensteranwendung verfügt über einen Container der obersten Ebene und kann diesen auch nur haben Mit anderen Worten: Der Container der obersten Ebene kann nicht in andere Steuerelemente eingebunden werden.
Neben dem gerade erwähnten JPanel gibt es viele Container-Steuerelemente, darunter auch JTabbedPane, JScrollPane usw. Zu den Nicht-Container-Steuerelementen gehören JButton, JLabel, JTextField usw. Wenn Sie einem Containertyp-Steuerelement ein Steuerelement hinzufügen müssen, können Sie dies mit der Methode add(Component comp) erreichen, z. B.:
JPanel-Panel = neues JPanel();
JButton-Taste = new JButton();
panel.add(button);
3. Layout
Was ist Layout? Layout ist ein Schnittstellenverwaltungssystem, das in Java verwendet wird, um die Anordnung und Position von Steuerelementen zu steuern. Menschen, die andere visuelle Programmiersprachen verwendet haben, werden beim ersten Kontakt immer das Gefühl haben, dass das Design der Java-Schnittstelle umständlich ist: Es gibt keine WYSIWYG-Methode zum Festlegen von Steuerkoordinaten! Es stellt sich jedoch heraus, dass das von Java selbst bereitgestellte Layout-Management-System unsere Anforderungen ebenfalls gut erfüllen kann und weitere Vorteile bei der plattformübergreifenden Leistung bietet.
Häufig verwendete Layouts sind:
・BorderLayout: Ein Verwaltungssystem, das die Benutzeroberfläche in obere, untere, linke, rechte und mittlere Bereiche unterteilt. Im BorderLayout-Layout können Sie maximal 5 Steuerelemente platzieren. Es wird empfohlen, es zu verwenden andere Layoutsysteme.
・GridLayout: GridLayout ist ein Layout-Management-System, das die Benutzeroberfläche in ein schachbrettartiges Layout schneidet. Wenn wir eine Rechnersoftware entwickeln möchten, die der von Windows ähnelt, ist GridLayout zweifellos die beste Wahl.
・FlowLayout: FlowLayout unterscheidet sich von den beiden oben genannten Arten von Layout-Management-Systemen. In FlowLayout müssen Sie nicht angeben, wo die einzelnen Steuerelemente platziert werden sollen. Sie müssen nur die Steuerelemente zu FlowLayout hinzufügen, und FlowLayout platziert sie entsprechend die Reihenfolge, in der Sie die Steuerelemente hinzufügen. Das Steuerelement wird automatisch umgebrochen, wenn nicht genügend Platz vorhanden ist.
Nachdem wir ein grundlegendes Verständnis dieser Layout-Management-Systeme erlangt haben, beginnen wir gemeinsam mit dem Interface-Design. Nachdem wir die Einstellungen von „Lianliankan“ in QQ-Spielen sorgfältig beobachtet haben, können wir feststellen, dass die gesamte Benutzeroberfläche in drei Bereiche unterteilt ist. Der obere Bereich ist der Systemmenübereich, der größte Bereich ist der Benutzerspielbereich und es gibt auch eine Benutzerinteraktion Bereich: Jeder Bereich besteht aus mehreren Steuerelementen.
Wo fangen wir bei so vielen Kontrollen an? Da andere Steuerelemente im Containersteuerelement platziert werden können, müssen wir nur das Containersteuerelement bestimmen, das zuerst platziert werden soll. Nachdem wir nun wissen, wie viele Container-Steuerelemente wir verwenden müssen, gehen wir zur Auswahl des Layout-Management-Systems über. GridLayout verwenden? Es scheint ein bisschen erzwungen zu sein, FlowLayout zu verwenden? Gibt es eine bessere Option? Ich denke übrigens, dass Sie an BorderLayout gedacht haben, wie in Abbildung 2 unten dargestellt.
Bevor Sie beginnen, muss jeder darauf achten, dass beim Schnittstellendesign zunächst die Größe berücksichtigt werden muss, sei es die Größe der Hauptprogrammschnittstelle oder die Größe jedes Bereichs Es ist schmerzhaft, es in Zukunft zu ändern.
Das Folgende ist das entsprechende Quellprogramm:
java.awt.* importieren;
import javax.swing.*;
Die öffentliche Klasse KyodaiUI erweitert JFrame {
öffentliches KyodaUI() {
this.setSize(780, 500); //Setzen Sie die Größe des Formulars auf 780*500
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false); //Die Größe des Formulars kann nicht geändert werden
this.setTitle("Lianliankan"); //Legen Sie den Titel fest
JPanel-ToolBar = new JPanel();
toolBar.setBackground(Color.white);
toolBar.setPreferredSize(new Dimension(780, 48));
JPanel actionPanel = new JPanel(); //Erstelle ein neues JPanel-Typ-Steuerelement
actionPanel.setBackground(Color.yellow); //Legen Sie die Hintergrundfarbe fest
actionPanel.setPreferredSize(new Dimension(160, 380)); //Größe festlegen
JPanel contentPanel = new JPanel();
contentPanel.setBackground(Color.blue);
contentPanel.setPreferredSize(new 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) löst HeadlessException {
KyodaiUI kyodaiUI = new KyodaiUI();
kyodaiUI.show();
}
}
Schauen wir uns an, wie das obige Programm funktioniert. Erstens zeigt „extend JFrame“ an, dass es von JFrame geerbt wird, dem grundlegendsten Containersteuerelement der obersten Ebene. Tatsächlich sind im JDK Steuerelemente, die mit dem Buchstaben J beginnen, Swing-Steuerelemente. Legen Sie dann die Eigenschaften des Containers fest. Unter anderem wird setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) verwendet, um die Java Virtual Machine anzuweisen, den Fensterprozess zu schließen, wenn der Benutzer auf die Schaltfläche „Schließen“ in der oberen rechten Ecke des Formulars klickt. Wenn Sie dies nicht tun, werden Sie feststellen, dass das Programm nicht beendet wird, obwohl Sie auf klicken können, um das Fenster zu schließen. Im folgenden Code fügen wir drei Panel-Container zum Container der obersten Ebene hinzu. Es ist zu beachten, dass wir es in AWT direkt als add(toolBar, BorderLayout.NORTH) schreiben können, in Swing jedoch als getContentPane() (add(toolBar, BorderLayout.NORTH)) schreiben müssen, sonst wird das Programm ausgeführt falsch.
Jetzt können Sie es kompilieren und ausführen, um zu sehen, ob es mit meinem laufenden Ergebnis übereinstimmt (siehe Abbildung 3)?
4. Grenze
Obwohl wir unterschiedliche Vordergrundfarben verwenden, um verschiedene Bereiche zu unterscheiden, gibt es keinen Sinn für Hierarchie. Mit einem Rand wird es viel schöner.
In Java können alle Swing-Steuerelemente, die mit J beginnen, die setBorder-Methode verwenden, um Grenzen für sich selbst festzulegen. Es gibt viele Arten von Rändern: linear, erhaben, konkav und leer. Sie können sie sogar frei kombinieren, um Ihren eigenen Stil zu schaffen. Alle Ränder müssen mit den in javax.swing.BorderFactory bereitgestellten statischen Methoden erstellt werden, wie zum Beispiel:
Grenze border = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
neueFarbe(45, 92, 162),
neueFarbe(43, 66, 97),
neueFarbe(45, 92, 162),
neue Farbe(84, 123, 200));
Jetzt ändern wir toolBar.setBackground(Color.white) in toolBar.setBorder(border). Ist der dreidimensionale Effekt bereits aufgetreten?
Praktischer Kampf – schreibe deinen eigenen Namen
Jetzt haben wir eine funktionierende Schnittstelle. Auch wenn sie nichts kann, keine Panik. Rom wurde nicht an einem Tag erbaut.
Lassen Sie uns nun im Menübereich ein „Info“-Menü bereitstellen, um Programminformationen anzuzeigen. Möchten Sie nicht, dass andere Ihren Namen erfahren? Swing selbst stellt ein fertiges Button-Steuerelement JButton bereit. Wir müssen nur einen neuen Button erstellen: JButton about = new JButton("about"); Wie soll dieser Button im Menübereich und nicht anderswo platziert werden? Wir können den folgenden Code hinzufügen: toolBar.add(about); Hey, warum gibt es keine Reaktion, wenn ich auf die Schaltfläche klicke? Dies liegt daran, dass Sie dem Programm nicht mitgeteilt haben, was es tun soll, wenn Sie auf die Schaltfläche klicken. Um einer Schaltfläche eine Ereignisantwort hinzuzufügen, müssen Sie zunächst about.addActionListener(this) verwenden, um das Programm anzuweisen, auf Ereignisse zu warten, wenn die Schaltfläche gedrückt wird. Da ActionListener eine Programmschnittstelle ist, müssen wir auch ein wenig daran arbeiten Die Deklaration der Klasse. Änderung: öffentliche Klasse KyodaiUI erweitert JFrame implementiert ActionListener {...} Der Zweck der Implementierung der ActionListener-Schnittstelle besteht darin, dem Programm mitzuteilen, dass ich Ereignisse verarbeiten möchte. Natürlich müssen wir zum Schluss noch den Code hinzufügen, um auf das Ereignis zu reagieren:
public void actionPerformed(ActionEvent e) {
if (e.getSource() == about) {
JOptionPane.showMessageDialog(this, „Mein Name“, „Über“,
JOptionPane.INFORMATION_MESSAGE);
zurückkehren ;
}
}
Unter diesen stellt e.getSource() das Steuerelement dar, das das Ereignis derzeit auslöst. Da es in unserem Programm häufig mehr als ein Steuerelement gibt, können diese Steuerelemente Ereignisse generieren. Daher müssen wir diese Methode verwenden, um das Steuerelement zu finden, das das Ereignis generiert hat.
Zusammenfassung
Sehen wir uns noch einmal an, was wir heute gelernt haben: Zuerst verstehen wir den Container der obersten Ebene und wissen auch, dass Steuerelemente in Container-Steuerelemente und Nicht-Container-Steuerelemente unterteilt sind. Schließlich haben wir uns auch mit den Schaltflächen befasst ein kleines Ereignis.
Es versteht sich von selbst, dass Sie dabei lernen und üben. Deshalb möchte ich Ihnen einige kleine Hausaufgaben hinterlassen, die Ihnen dabei helfen sollen, das Gelernte zu festigen: Die Schaltfläche, die wir oben hinzugefügt haben, befindet sich in der Mitte der Menüleiste und ist nicht schön. Bitte geben Sie es ein. Probieren Sie es links oder rechts aus.
Abschließend möchte ich Ihnen noch einige bessere Referenzmaterialien zur Verfügung stellen:
●Erstellen einer GUI mit JFC/Swing
http://java.sun.com/docs/books/tutorial/uiswing/index.html
●2D-Grafiken
http://java.sun.com/docs/books/tutorial/2d/index.html
●JDK-API
http://java.sun.com/j2se/1.4.2/docs/api/index.html