Swing
前言
這裡是 Java--GUI 系列文章,主要介紹Java中的圖形化界面程式設計及其實作。
Java的圖形化界面程式設計除了在自學中可以直覺地感受到效果,還會在考試的題目中察覺到重要性
關于作者:
- 小白(Libra),計算機興趣愛好者,Java,C,Hadoop,MySQL
- Email : [email protected]
- GitHub : https://github.com/Regel-zack
轉載請注明出處
正文
第一個JFrame視窗
忽略掉沒講到的内容會在後續涉及到
首先建立一個運作類,用來存放主方法
/**
* Application 類
* 操作人:小白
* 日期:2021/11/8
* 時間:13:02
* @author 别欺負小白了好咩
*/
public class Application {
public static void main(String[] args) {
MyFirstFrame test = new MyFirstFrame();
test.drawFrame();
test.drawFrame(200,300,50,100);
test.drawFrame();
}
}
其次建立一個窗體類,其中帶有窗體執行個體化以及繪制窗體的方法
import javax.swing.*;
import java.awt.*;
/**
* MyFirstFrame 類
* 操作人:小白
* 日期:2021/11/8
* 時間:13:04
* @author 别欺負小白了好咩
*/
public class MyFirstFrame {
int WIDTH;
int HEIGHT;
int LOCATION_X;
int LOCATION_Y;
JFrame f = new JFrame("第一個Swing窗體");
public void drawFrame(){
f.setSize(300,100);
f.setBackground(Color.WHITE);
f.setLocation(500,500);
f.setVisible(true);
System.out.println("預設視窗已顯示");
}
public void drawFrame(int WIDTH, int HEIGHT, int LOCATION_X, int LOCATION_Y) {
f.setSize(WIDTH,HEIGHT); ;
f.setBackground(Color.WHITE);
f.setLocation(LOCATION_X,LOCATION_Y);
f.setVisible(true);
System.out.println("自定義視窗已顯示");
}
}
以上代碼僅作參考代碼,具體教學思路請對照下面來看
首先在窗體繪制後,我們可以指定窗體的大小,背景顔色,位置以及是否顯示。
但是在打開多個視窗後(運作多次視窗繪制方法),隻會出現一個視窗,具體原因是由于我們隻執行個體化了一個視窗對象,其餘的幾次隻是在那基礎上做了一些參數的修改,以下代碼實作了打開多個視窗
import javax.swing.*;
import java.awt.*;
/**
* MyFirstFrame 類
* 操作人:小白
* 日期:2021/11/8
* 時間:13:04
* @author 别欺負小白了好咩
*/
public class MyFirstFrame {
int WIDTH;
int HEIGHT;
int LOCATION_X;
int LOCATION_Y;
public void drawFrame(){
JFrame f = new JFrame("這是預設視窗");
f.setSize(300,100);
f.setBackground(Color.WHITE);
f.setLocation(500,500);
f.setVisible(true);
System.out.println("預設視窗已顯示");
}
public void drawFrame(int WIDTH, int HEIGHT, int LOCATION_X, int LOCATION_Y) {
JFrame f = new JFrame("這是自定義視窗");
f.setSize(WIDTH,HEIGHT); ;
f.setBackground(Color.WHITE);
f.setLocation(LOCATION_X,LOCATION_Y);
f.setVisible(true);
System.out.println("自定義視窗已顯示");
}
}
使用前面的方法會避免建立多餘的視窗,具體看需求來選擇如何實作。
JLabel 标簽元件
可以将JFrame了解為一個盤子,那麼盤子上自然就可以承載其他的物品(元件),而這些元件隻需要放上去(add)就可以随着盤子一起呈現給使用者了。
JLabel 類的常用方法和常量
序号 | 方法或常量 | 類型 | 作用 |
---|---|---|---|
1 | public static final int LEFT | 常量 | 标簽文本左對齊 |
2 | public static final int CENTER | 标簽文本居中對齊 | |
3 | public static final int RIGHT | 标簽文本右對齊 | |
4 | public JLabel() throws HeadlessException | 構造 | 建立一個JLabel對象 |
5 | public JLabel(String text) throws HeadlessException | 建立一個标簽并指定文本内容 | |
6 | public JLabel(String text,int alignment) throws HeadlessException | 建立一個标簽并指定文本内容以及對齊方式,可以使用JLabel.LEFT 、JLabel.RIGHT、 JLabel.CENTER3個值 | |
7 | public JLabel(String text,Icon icon,int alignment) throws HeadlessException | 建立具有指定文本、圖像和水準對齊方式的JLabel對象 | |
8 | public JLabel(Icon image,int alignment) | 建立具有指定圖像和水準對齊方式的JLabel執行個體 | |
9 | public void setText(String text) | 普通 | 設定标簽的文本 |
10 | public String getText() | 取得标簽的文本 | |
11 | public void setAlignment(int alignment) | 設定标簽對齊方式 | |
12 | public void setIcon(Icon icon) | 設定指定的圖像 |
示例代碼如下
import javax.swing.*;
/**
* Application 類
* 操作人:小白
* 日期:2021/11/8
* 時間:13:02
* @author 别欺負小白了好咩
*/
public class Application {
public static void main(String[] args) {
MyFirstFrame test = new MyFirstFrame();
test.drawFrame();
test.addJLabel(new JLabel("這是一個标簽文本"),test.f);
}
}
import javax.swing.*;
import java.awt.*;
/**
* MyFirstFrame 類
* 操作人:小白
* 日期:2021/11/8
* 時間:13:04
* @author 别欺負小白了好咩
*/
public class MyFirstFrame {
int WIDTH;
int HEIGHT;
int LOCATION_X;
int LOCATION_Y;
JFrame f = new JFrame("這是一個視窗");
public void drawFrame(){
f.setSize(300,100);
f.setBackground(Color.WHITE);
f.setLocation(500,500);
f.setVisible(true);
System.out.println("預設視窗已顯示");
}
public void drawFrame(int WIDTH, int HEIGHT, int LOCATION_X, int LOCATION_Y) {
f.setSize(WIDTH,HEIGHT); ;
f.setBackground(Color.WHITE);
f.setLocation(LOCATION_X,LOCATION_Y);
f.setVisible(true);
System.out.println("自定義視窗已顯示");
}
public void addJLabel(JLabel jLabel,JFrame jFrame){
jFrame.add(jLabel);
System.out.println("标簽元件已添加完畢!");
}
}
其中标簽文本也可以定義成類變量來以便不需要臨時執行個體化,這樣的好處在于可以修改樣式以及修改内容,具體可以看需求,這裡僅做示範
JButton 按鈕元件
按鈕元件使用跟标簽元件大體相似,這裡不一一列舉其常用方法,僅作示例
根據之前的調整,我們的代碼可以修改為下面這樣
import javax.swing.*;
/**
* Application 類
* 操作人:小白
* 日期:2021/11/8
* 時間:13:02
* @author 别欺負小白了好咩
*/
public class Application {
public static void main(String[] args) {
MyFirstFrame test = new MyFirstFrame();
test.drawFrame();
test.drawJLabel("這個是窗體之上的标簽");
test.drawJButton("這個是窗體之上的按鈕");
test.addJLabel(test.l,test.f);
test.addJLabel(test.b,test.f);
}
}
import javax.swing.*;
import java.awt.*;
/**
* MyFirstFrame 類
* 操作人:小白
* 日期:2021/11/8
* 時間:13:04
* @author 别欺負小白了好咩
*/
public class MyFirstFrame {
int WIDTH;
int HEIGHT;
int LOCATION_X;
int LOCATION_Y;
JFrame f = new JFrame("這是一個視窗");
JLabel l = new JLabel("這是一個标簽");
JButton b = new JButton("這是一個按鈕");
public void drawFrame(){
this.drawFrame(300,100,500,500);
}
public void drawFrame(int WIDTH, int HEIGHT, int LOCATION_X, int LOCATION_Y) {
f.setSize(WIDTH,HEIGHT); ;
f.setBackground(Color.WHITE);
f.setLocation(LOCATION_X,LOCATION_Y);
f.setVisible(true);
System.out.println("視窗已顯示");
}
public void drawJLabel(String text){
l.setText(text);
System.out.println("标簽内容已修改為: --> " + text);
}
public void drawJButton(String text){
b.setText(text);
System.out.println("按鈕内容已修改為: --> " + text);
}
public void addJLabel(Container container,JFrame jFrame){
jFrame.add(container);
System.out.println("元件已添加完畢!");
}
}
其中控制台輸出如下

小結
多加練習才能學好