Swing ist ein GUI-Toolkit, das für Java entwickelt wurde.

Swing ist Teil der Java Foundation Classes.

Swing enthält Widgets für grafische Benutzeroberflächen (GUI) wie: Textfelder, Schaltflächen, Split-Panes und Tabellen.

Swing bietet viele Bildschirmanzeigeelemente, die besser sind als AWT. Sie sind in reinem Java geschrieben, sodass sie wie Java selbst plattformübergreifend laufen können, anders als AWT. Sie sind Teil von JFC. Sie unterstützen austauschbares Look-and-Feel und Themes (die Standard-Themes für verschiedene Betriebssysteme), aber sie verwenden nicht tatsächlich die von der Plattform bereitgestellten nativen Widgets; stattdessen imitieren sie diese nur an der Oberfläche. Das bedeutet, dass Sie jedes von Java unterstützte Look-and-Feel auf jeder Plattform verwenden können. Der Nachteil von Leichtgewichtskomponenten ist die langsamere Ausführungsgeschwindigkeit, während der Vorteil darin besteht, dass sie auf allen Plattformen ein einheitliches Verhalten zeigen können.


Hallo-Welt-Programm

Der Code für die Datei HelloWorldSwing.java lautet wie folgt:

import javax.swing.*;
public class HelloWorldSwing {
    /**{
     * 创建并显示GUI。出于线程安全的考虑,
     * 这个方法在事件调用线程中调用。
     */
    private static void createAndShowGUI() {
        // 确保一个漂亮的外观风格
        JFrame.setDefaultLookAndFeelDecorated(true);

        // 创建及设置窗口
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 添加 "Hello World" 标签
        JLabel label = new JLabel("Hello World");
        frame.getContentPane().add(label);

        // 显示窗口
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        // 显示应用 GUI
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

Führen Sie den folgenden Befehl aus, um das Ergebnis auszugeben:

$ javac HelloWorldSwing.java
$ java HelloWorldSwing

Ein Beispiel für eine Benutzer-Login-Box

Der Code für die Datei SwingLoginExample.java lautet wie folgt:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField; 
public class SwingLoginExample {
    
    public static void main(String[] args) {    
        // 创建 JFrame 实例
        JFrame frame = new JFrame("Login Example");
        // Setting the width and height of frame
        frame.setSize(350, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        /* 创建面板,这个类似于 HTML 的 div 标签
         * 我们可以创建多个面板并在 JFrame 中指定位置
         * 面板中我们可以添加文本字段,按钮及其他组件。
         */
        JPanel panel = new JPanel();    
        // 添加面板
        frame.add(panel);
        /* 
         * 调用用户定义的方法并添加组件到面板
         */
        placeComponents(panel);

        // 设置界面可见
        frame.setVisible(true);
    }

    private static void placeComponents(JPanel panel) {

        /* 布局部分我们这边不多做介绍
         * 这边设置布局为 null
         */
        panel.setLayout(null);

        // 创建 JLabel
        JLabel userLabel = new JLabel("User:");
        /* 这个方法定义了组件的位置。
         * setBounds(x, y, width, height)
         * x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。
         */
        userLabel.setBounds(10,20,80,25);
        panel.add(userLabel);

        /* 
         * 创建文本域用于用户输入
         */
        JTextField userText = new JTextField(20);
        userText.setBounds(100,20,165,25);
        panel.add(userText);

        // 输入密码的文本域
        JLabel passwordLabel = new JLabel("Password:");
        passwordLabel.setBounds(10,50,80,25);
        panel.add(passwordLabel);

        /* 
         *这个类似用于输入的文本域
         * 但是输入的信息会以点号代替,用于包含密码的安全性
         */
        JPasswordField passwordText = new JPasswordField(20);
        passwordText.setBounds(100,50,165,25);
        panel.add(passwordText);

        // 创建登录按钮
        JButton loginButton = new JButton("login");
        loginButton.setBounds(10, 80, 80, 25);
        panel.add(loginButton);
    }

}

Führen Sie den folgenden Befehl aus, um das Ergebnis auszugeben:

$ javac SwingLoginExample.java
$ java SwingLoginExample

Konzeptanalyse:

JFrame– Die Grundidee eines Java-GUI-Programms basiert auf JFrame. Es ist ein Fensterobjekt auf dem Bildschirm, das maximiert, minimiert und geschlossen werden kann.

JPanel
– Eine Panel-Container-Klasse im Java-Swing-GUI-Toolkit, enthalten im Paket javax.swing. Sie kann verschachtelt werden, und ihre Funktion besteht darin, Komponenten mit derselben logischen Funktion in einem Fenster zu kombinieren. Sie ist ein leichtgewichtiger Container, der einem JFrame-Fenster hinzugefügt werden kann.

JLabel– Ein JLabel-Objekt kann Text, Bilder oder beides anzeigen. Sie können angeben, wo der Beschriftungsinhalt im Anzeigebereich des Labels ausgerichtet wird, indem Sie die vertikale und horizontale Ausrichtung festlegen. Standardmäßig ist ein Label vertikal in seinem Anzeigebereich zentriert. Standardmäßig ist ein Label, das nur Text anzeigt, an der führenden Kante ausgerichtet; ein Label, das nur ein Bild anzeigt, ist horizontal zentriert.

JTextField– Eine leichtgewichtige Komponente, die das Bearbeiten einer einzelnen Textzeile ermöglicht.

JPasswordField– Ermöglicht uns, wie in einem Eingabefeld eine Textzeile einzugeben, sie jedoch mit Sternchen (*) oder Punkten zu verbergen, um ein Passwort zu erzeugen.

JButton– Eine Instanz der Klasse JButton. Wird verwendet, um Schaltflächen wie „Login“ im Beispiel zu erstellen.