AWT中常用元件
基本元件
元件名 | 功能 |
---|---|
Button | Button |
Canvas | 用於繪圖的畫布 |
Checkbox | 核取方塊元件(也可當做單選框元件使用) |
CheckboxGroup | 用於將多個Checkbox 元件組合成一組, 一組 Checkbox 元件將只有一個可以 被選中 , 即全部變成單選框元件 |
Choice | 下拉選擇框 |
Frame | 視窗 , 在 GUI 程式裡通過該類建立視窗 |
Label | 標籤類,用於放置提示性文字 |
List | JU表框元件,可以新增多項條目 |
Panel | 不能單獨存在基本容器類,必須放到其他容器中 |
Scrollbar | 滑動條元件。如果需要使用者輸入位於某個範圍的值 , 就可以使用滑動條元件 ,比如調 色板中設定 RGB 的三個值所用的滑動條。當建立一個滑動條時,必須指定它的方向、初始值、 滑塊的大小、最小值和最大值。 |
ScrollPane | 帶水平及垂直滾動條的容器元件 |
TextArea | 多行文字域 |
TextField | 單行文字框 |
這些 AWT 元件的用法比較簡單,可以查閱 API 文件來獲取它們各自的構方法、成員方法等詳細資訊。
API 文件地址:https://www.apiref.com/java11-zh/java.desktop/javax/swing/package-summary.html
案例:
實現下圖效果:
演示程式碼:
import javax.swing.*;
import java.awt.*;
public class BasicComponentDemo {
Frame frame = new Frame("這裡測試基本元件");
//定義一個按鈕
Button ok = new Button("確認");
//定義一個核取方塊組
CheckboxGroup cbg = new CheckboxGroup();
//定義一個單選框,初始處於被選中狀態,並新增到cbg組中
Checkbox male = new Checkbox("男", cbg, true);
//定義一個單選框,初始處於未被選中狀態,並新增到cbg組中
Checkbox female = new Checkbox("女", cbg, false);
//定義一個核取方塊,初始處於未被選中狀態
Checkbox married = new Checkbox("是否已婚?", false);
//定義一個下拉選擇框
Choice colorChooser = new Choice();
//定義一個列表選擇框
List colorList = new List(6, true);
//定義一個5行,20列的多行文字域
TextArea ta = new TextArea(5, 20);
//定義一個50列的單行文字域
TextField tf = new TextField(50);
public void init() {
//往下拉選擇框中新增內容
colorChooser.add("紅色");
colorChooser.add("綠色");
colorChooser.add("藍色");
//往列表選擇框中新增內容
colorList.add("紅色");
colorList.add("綠色");
colorList.add("藍色");
//建立一個裝載按鈕和文字框的Panel容器
Panel bottom = new Panel();
bottom.add(tf);
bottom.add(ok);
//把bottom新增到Frame的底部
frame.add(bottom,BorderLayout.SOUTH);
//建立一個Panel容器,裝載下拉選擇框,單選框和核取方塊
Panel checkPanel = new Panel();
checkPanel.add(colorChooser);
checkPanel.add(male);
checkPanel.add(female);
checkPanel.add(married);
//建立一個垂直排列的Box容器,裝載 多行文字域和checkPanel
Box topLeft = Box.createVerticalBox();
topLeft.add(ta);
topLeft.add(checkPanel);
//建立一個水平排列的Box容器,裝載topLeft和列表選擇框
Box top = Box.createHorizontalBox();
top.add(topLeft);
top.add(colorList);
//將top新增到frame的中間區域
frame.add(top);
//設定frame最佳大小並可見
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new BasicComponentDemo().init();
}
}
對話方塊Dialog
Dialog
Dialog 是 Window 類的子類,是 一個容器類,屬於特殊元件 。 對話方塊是可以獨立存在的頂級視窗, 因此用法與普通視窗的用法幾乎完全一樣,但是使用對話方塊需要注意下面兩點:
- 對話方塊通常依賴於其他視窗,就是通常需要有一個父視窗;
- 對話方塊有非模式(non-modal)和模式(modal)兩種,當某個模式對話方塊被開啟後,該模式對話方塊總是位於它的父視窗之上,在模式對話方塊被關閉之前,父視窗無法獲得焦點。
模式窗體:你必須關閉該窗體,才能操作其它窗體;比如說,必須按確定或取消,或者按關閉。
非模式窗體:不必關閉該窗體,就可轉換到其它窗體上進行操作。
方法名稱 | 方法功能 |
---|---|
Dialog(Frame owner, String title, boolean modal) | 建立一個對話方塊物件: owner:當前對話方塊的父視窗 title:當前對話方塊的標題 modal:當前對話方塊是否是模式對話方塊,true/false |
案例1:
通過Frame、Button、Dialog實現下圖效果:
演示程式碼1:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
public class DialogDemo1 {
public static void main(String[] args) {
Frame frame = new Frame("這裡測試Dialog");
Dialog d1 = new Dialog(frame, "模式對話方塊", true);
Dialog d2 = new Dialog(frame, "非模式對話方塊", false);
Button b1 = new Button("開啟模式對話方塊");
Button b2 = new Button("開啟非模式對話方塊");
//設定對話方塊的大小和位置
d1.setBounds(20,30,300,400);
d2.setBounds(20,30,300,400);
//給b1和b2繫結監聽事件
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
d1.setVisible(true);
}
});
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
d2.setVisible(true);
}
});
//把按鈕新增到frame中
frame.add(b1);
frame.add(b2,BorderLayout.SOUTH);
//設定frame最佳大小並可見
frame.pack();
frame.setVisible(true);
}
}
在Dialog對話方塊中,可以根據需求,自定義內容
案例:
點選按鈕,彈出一個模式對話方塊,其內容如下:
演示程式碼:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import java.awt.*;
public class DialogDemo2 {
public static void main(String[] args) {
Frame frame = new Frame("這裡測試Dialog");
Dialog d1 = new Dialog(frame, "模式對話方塊", true);
//往對話方塊中新增內容
Box vBox = Box.createVerticalBox();
vBox.add(new TextField(15));
vBox.add(new JButton("確認"));
d1.add(vBox);
Button b1 = new Button("開啟模式對話方塊");
//設定對話方塊的大小和位置
d1.setBounds(20,30,200,100);
//給b1繫結監聽事件
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
d1.setVisible(true);
}
});
//把按鈕新增到frame中
frame.add(b1);
//設定frame最佳大小並可見
frame.pack();
frame.setVisible(true);
}
}
FileDialog
Dialog 類還有 一個子類 : FileDialog ,它代表一個檔案對話方塊,用於開啟或者儲存 檔案,需要注意的是FileDialog無法指定模態或者非模態,這是因為 FileDialog 依賴於執行平臺的實現,如果執行平臺的檔案對話方塊是模態的,那麼 FileDialog 也是模態的;否則就是非模態的 。
方法名稱 | 方法功能 |
---|---|
FileDialog(Frame parent, String title, int mode) | 建立一個檔案對話方塊: parent:指定父視窗 title:對話方塊標題 mode:檔案對話方塊型別,如果指定為FileDialog.load,用於開啟檔案,如果指定為FileDialog.SAVE,用於儲存檔案 |
String getDirectory() | 獲取被開啟或儲存檔案的絕對路徑 |
String getFile() | 獲取被開啟或儲存檔案的檔名 |
案例2:
使用 Frame、Button和FileDialog完成下圖效果:
演示程式碼2:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class FileDialogTest {
public static void main(String[] args) {
Frame frame = new Frame("這裡測試FileDialog");
FileDialog d1 = new FileDialog(frame, "選擇需要載入的檔案", FileDialog.LOAD);
FileDialog d2 = new FileDialog(frame, "選擇需要儲存的檔案", FileDialog.SAVE);
Button b1 = new Button("開啟檔案");
Button b2 = new Button("儲存檔案");
//給按鈕新增事件
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
d1.setVisible(true);
//列印使用者選擇的檔案路徑和名稱
System.out.println("使用者選擇的檔案路徑:"+d1.getDirectory());
System.out.println("使用者選擇的檔名稱:"+d1.getFile());
}
});
System.out.println("-------------------------------");
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
d2.setVisible(true);
//列印使用者選擇的檔案路徑和名稱
System.out.println("使用者選擇的檔案路徑:"+d2.getDirectory());
System.out.println("使用者選擇的檔名稱:"+d2.getFile());
}
});
//新增按鈕到frame中
frame.add(b1);
frame.add(b2,BorderLayout.SOUTH);
//設定frame最佳大小並可見
frame.pack();
frame.setVisible(true);
}
}
個人部落格本文地址:https://kohler19.gitee.io/2022/04/05/java-GUI2/
個人部落格:https://kohler19.gitee.io/
公眾號:“愚生淺末”