java-GUI編程之AWT組件

AWT中常用組件

基本組件

組件名 功能
Button Button
Canvas 用於繪圖的畫布
Checkbox 複選框組件(也可當做單選框組件使用)
CheckboxGroup 用於將多個Checkbox 組件組合成一組, 一組 Checkbox 組件將只有一個可以 被選中 , 即全部變成單選框組件
Choice 下拉選擇框
Frame 窗口 , 在 GUI 程序里通過該類創建窗口
Label 標籤類,用於放置提示性文本
List JU表框組件,可以添加多項條目
Panel 不能單獨存在基本容器類,必須放到其他容器中
Scrollbar 滑動條組件。如果需要用戶輸入位於某個範圍的值 , 就可以使用滑動條組件 ,比如調 色板中設置 RGB 的三個值所用的滑動條。當創建一個滑動條時,必須指定它的方向、初始值、 滑塊的大小、最小值和最大值。
ScrollPane 帶水平及垂直滾動條的容器組件
TextArea 多行文本域
TextField 單行文本框

這些 AWT 組件的用法比較簡單,可以查閱 API 文檔來獲取它們各自的構方法、成員方法等詳細信息。

API 文檔地址://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);
    }
}

個人博客本文地址://kohler19.gitee.io/2022/04/05/java-GUI2/

個人博客://kohler19.gitee.io/
公眾號:「愚生淺末」