跳轉到內容

Java Swing/Swing

100% developed
來自華夏公益教科書

第一個 GUI

[編輯 | 編輯原始碼]

好的,現在是時候深入 Swing 了。啟動您的文字編輯器或 IDE,然後輸入以下程式碼。

Computer code HelloSwing.java
import javax.swing.JFrame;

public class HelloSwing {

    public static void main(String[] args) {
        
        JFrame frame = new JFrame(); //We create a new frame
        frame.setSize(200, 100); //Setting size of width=200px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Frame must close when close button is pressed
        frame.setVisible(true);

    }
}

輸出

編譯程式碼並執行它。如果您獲得如上所示的輸出,則表示您已全部做對了。

它是如何工作的?

[編輯 | 編輯原始碼]

現在讓我們看看它是如何工作的。與所有 Java 程式一樣,該程式從建立一個類開始,我們將其命名為HelloSwing。該類包含程式從其開始執行的 main 方法。該函式中的第一行是

Example 程式碼部分
JFrame frame = new JFrame();

在第一行中,我們建立新的 Java 框架或 JFrame。框架不過是一個 Swing 容器,它包含其他元件,如標籤、按鈕、文字欄位、選單欄等。現在,由於我們已經建立了一個框架,並且在顯示它之前,我們需要設定它的尺寸。要設定框架的尺寸,我們使用以下程式碼

Example 程式碼部分
frame.setSize(200, 100);

setSize(int width, int height)接受兩個引數,第一個是框架寬度,第二個是框架高度。我們已將框架尺寸設定為 200 畫素(px)寬,100px 高。因此,框架尺寸已成功設定。

現在,如果有人點選框架中的關閉按鈕會發生什麼?我們希望程式退出並清除記憶體,因此在點選關閉按鈕時,我們使用setDefaultCloseOperation()函式來關閉框架。我們希望程式在按下關閉按鈕時退出,因此我們使用以下程式碼

Example 程式碼部分
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

所有操作都已正確完成,我們現在需要做的就是使框架可見。為此,我們使用setVisible(boolean b)函式。該函式接受一個布林輸入。如果傳入 true,則框架可見,否則如果傳入 false,則框架不可見。為了使框架可見,我們使用以下程式碼

Example 程式碼部分
frame.setVisible(true);

因此,我們建立了 HelloSwing 程式。

深入 Swing

[編輯 | 編輯原始碼]

帶標題的框架

[編輯 | 編輯原始碼]

在最後一個示例中,我們看到了如何建立一個沒有任何內容的框架。這次我們將建立一個帶標題的框架。為此,讓我們建立一個類FrameWithTitle。所有程式碼與之前的示例完全相同,只有一個變化。請注意 main 方法中的第一個語句

Example 程式碼部分
JFrame frame = new JFrame("Hello Swing");

在這裡,new JFrame()建構函式獲取一個字串引數。此引數構成框架的標題。簡單!

Computer code FrameWithTitle.java
import javax.swing.JFrame;

public class FrameWithTitle {
    
    public static void main(String[] args) {

        JFrame frame = new JFrame("Hello Swing"); // We create a new frame
        frame.setSize(200, 100); // Setting size of width=200px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame must close when closed button is presses
        frame.setVisible(true);

    }

}

輸出

編譯 FrameWithTitle 程式碼將給出如上所示的輸出。

新增標籤

[編輯 | 編輯原始碼]

我們已經建立了一個空框架,一個帶標題的框架,現在讓我們看看如何向框架新增一個簡單的元件。標籤是一個簡單的元件,我們將把它新增到我們的框架中。仔細閱讀以下程式。與之前的示例相比,它有一個新語句。

Computer code AddingLabel.java
import javax.swing.JFrame;
import javax.swing.JLabel;

public class AddingLabel {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Hello Swing"); // We create a new frame
        frame.setSize(200, 100); // Setting size of width=200px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame must close when closed button is presses
        frame.add(new JLabel("Diving into swing!")); // Adding a label
        frame.setVisible(true);

    }
}

輸出

看看這行

Example 程式碼部分
frame.add(new JLabel("Diving into swing!"));

在這行中,我們使用add()函式告訴計算機將一個元件或物件新增到框架中。由於我們要新增一個標籤,因此我們使用new JLabel()命令傳遞一個新的標籤物件。

new JLabel("Diving into swing!") 建立一個新的標籤。新增後,框架使用frame.setVisible(true);顯示。

如果一切都做對了,您應該得到如上所示的輸出。

標籤和文字

[編輯 | 編輯原始碼]
Computer code LabelnText.java
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class LabelnText {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Hello Swing"); // We create a new frame
        frame.setSize(200, 100); // Setting size of width=200px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame must close when closed button is presses
        frame.add(new JLabel("Diving into swing!")); // Adding a label
        frame.add(new JTextField("Type something here"));// Adding text field
        frame.setVisible(true);

    }

}

輸出

在最後一個示例(AddingLabel.java)中,我們看到了如何將 JLabel 新增到 JFrame。現在,我們將透過新增更多元件來擴充套件我們的知識。讓我們新增一個文字欄位(即 JTextField)以及標籤。上面顯示的程式(LabelnText.java)與 AddingLabel.java 的程式碼相同,但略有不同。看看倒數第二行frame.add(new JTextField("Type something here"));,在這行中,我們使用add()方法將JTextField新增到框架中。在 add 方法中,我們使用new JTextField("Type something here")語句傳遞一個新的 JTextField。JTextField()建構函式可以接受一個字串引數,該引數設定為文字欄位的文字值。

因此,當我們執行示例時,我們希望框架在它的右側有一個標籤和一個文字欄位。但是看看輸出。哪裡錯了?我們只看到一個佔用了整個框架的文字欄位!Java 有 bug 嗎?答案是標籤和文字欄位都存在於框架中。文字欄位繪製在標籤的頂部。

Java 虛擬機器很傻。您告訴它放一個標籤,它就放了一個標籤到框架上,接下來您告訴它放一個文字欄位,它就忠實地執行了。但它把文字欄位放在了標籤的頂部。為了獲得期望的輸出,比如標籤和文字欄位並排放置,我們必須使用所謂的佈局管理器,稍後將對此進行簡要介紹。

佈局管理器

[編輯 | 編輯原始碼]
Computer code LayoutManagerDemo.java
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class LayoutManagerDemo {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Hello Swing"); // We create a new frame
        frame.setSize(200, 100); // Setting size of width=200px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame must close when closed button is presses
        frame.setLayout(new FlowLayout()); // Adding layout, flow layout in this case
        frame.add(new JLabel("Diving into swing!")); // Adding a label
        frame.add(new JTextField("Type something here")); // Adding text field
        frame.setVisible(true);

    }
}

輸出

讓我們看看如果我們改變框架尺寸會發生什麼。

Computer code LayoutManagerDemo1.java
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class LayoutManagerDemo1 {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Hello Swing"); // We create a new frame
        frame.setSize(500, 100); // Setting size of width=500px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame must close when closed button is presses
        frame.setLayout(new FlowLayout()); // Adding layout, flow layout in this case
        frame.add(new JLabel("Diving into swing!")); // Adding a label
        frame.add(new JTextField("Type something here")); // Adding text field
        frame.setVisible(true);

    }
}


輸出

打包框架

[編輯 | 編輯原始碼]

打包優化了框架的大小。

Computer code PackingFrames.java
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class PackingFrames {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Hello Swing"); // We create a new frame
        //frame.setSize(500, 100); // Setting size of width=200px and height=100px
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame must close when closed button is presses
        frame.setLayout(new FlowLayout());
        frame.add(new JLabel("Diving into swing!")); // Adding a label
        frame.add(new JTextField("Type something here")); // Adding text field
        frame.pack(); // Packing components into frames. This is like auto sizing of frames
        frame.setVisible(true);

    }
}

輸出


華夏公益教科書