Java Swing/Swing
好的,現在是時候深入 Swing 了。啟動您的文字編輯器或 IDE,然後輸入以下程式碼。
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 方法。該函式中的第一行是
程式碼部分
JFrame frame = new JFrame();
|
在第一行中,我們建立新的 Java 框架或 JFrame。框架不過是一個 Swing 容器,它包含其他元件,如標籤、按鈕、文字欄位、選單欄等。現在,由於我們已經建立了一個框架,並且在顯示它之前,我們需要設定它的尺寸。要設定框架的尺寸,我們使用以下程式碼
程式碼部分
frame.setSize(200, 100);
|
setSize(int width, int height)接受兩個引數,第一個是框架寬度,第二個是框架高度。我們已將框架尺寸設定為 200 畫素(px)寬,100px 高。因此,框架尺寸已成功設定。
現在,如果有人點選框架中的關閉按鈕會發生什麼?我們希望程式退出並清除記憶體,因此在點選關閉按鈕時,我們使用setDefaultCloseOperation()函式來關閉框架。我們希望程式在按下關閉按鈕時退出,因此我們使用以下程式碼
程式碼部分
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
所有操作都已正確完成,我們現在需要做的就是使框架可見。為此,我們使用setVisible(boolean b)函式。該函式接受一個布林輸入。如果傳入 true,則框架可見,否則如果傳入 false,則框架不可見。為了使框架可見,我們使用以下程式碼
程式碼部分
frame.setVisible(true);
|
因此,我們建立了 HelloSwing 程式。
在最後一個示例中,我們看到了如何建立一個沒有任何內容的框架。這次我們將建立一個帶標題的框架。為此,讓我們建立一個類FrameWithTitle。所有程式碼與之前的示例完全相同,只有一個變化。請注意 main 方法中的第一個語句
程式碼部分
JFrame frame = new JFrame("Hello Swing");
|
在這裡,new JFrame()建構函式獲取一個字串引數。此引數構成框架的標題。簡單!
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 程式碼將給出如上所示的輸出。
我們已經建立了一個空框架,一個帶標題的框架,現在讓我們看看如何向框架新增一個簡單的元件。標籤是一個簡單的元件,我們將把它新增到我們的框架中。仔細閱讀以下程式。與之前的示例相比,它有一個新語句。
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);
}
}
|
輸出
看看這行
程式碼部分
frame.add(new JLabel("Diving into swing!"));
|
在這行中,我們使用add()函式告訴計算機將一個元件或物件新增到框架中。由於我們要新增一個標籤,因此我們使用new JLabel()命令傳遞一個新的標籤物件。
new JLabel("Diving into swing!") 建立一個新的標籤。新增後,框架使用frame.setVisible(true);顯示。
如果一切都做對了,您應該得到如上所示的輸出。
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 虛擬機器很傻。您告訴它放一個標籤,它就放了一個標籤到框架上,接下來您告訴它放一個文字欄位,它就忠實地執行了。但它把文字欄位放在了標籤的頂部。為了獲得期望的輸出,比如標籤和文字欄位並排放置,我們必須使用所謂的佈局管理器,稍後將對此進行簡要介紹。
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);
}
}
|
輸出
讓我們看看如果我們改變框架尺寸會發生什麼。
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);
}
}
|
輸出
打包優化了框架的大小。
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);
}
}
|
輸出






