java-GUI程式設計之AWT元件

愚生淺末發表於2022-04-05

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

案例:

​ 實現下圖效果:


java-GUI程式設計之AWT元件

演示程式碼:

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實現下圖效果:

java-GUI程式設計之AWT元件

演示程式碼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對話方塊中,可以根據需求,自定義內容

案例:

​ 點選按鈕,彈出一個模式對話方塊,其內容如下:

java-GUI程式設計之AWT元件

演示程式碼:

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完成下圖效果:

java-GUI程式設計之AWT元件

演示程式碼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/
公眾號:“愚生淺末”

相關文章