java-GUI編程之AWT組件

来源:https://www.cnblogs.com/kohler21/archive/2022/04/05/16102099.html
-Advertisement-
Play Games

AWT中常用組件 基本組件 組件名 功能 Button Button Canvas 用於繪圖的畫布 Checkbox 覆選框組件(也可當做單選框組件使用) CheckboxGroup 用於將多個Checkbox 組件組合成一組, 一組 Checkbox 組件將只有一個可以 被選中 , 即全部變成單選 ...


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/
公眾號:“愚生淺末”

歡迎關註我的公眾號,共同學習


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Qt QComboBox之setEditable和currentTextChanged以及其源碼分析 前言 最近做了一個QComboBox里有選項,然後選中選項之後就會自動觸發條件搜索。然後我發現,在我初始化comboBox時,由於信號連接的原因會觸發這個currentTextChanged信號。代 ...
  • 今天給大家分享一個IDEA調試過程中的一個小技巧。 先來說說場景,你有沒有碰到類似的情況,一個迴圈結構里,中間某一個情況可能會出錯。比如下麵的代碼結果中,可能執行到第27次的時候,會出現問題。 for(int i = 0; i < 100; i++) { // 業務邏輯 System.out.pri ...
  • Lock: 鎖對象 * void lock(): 獲取鎖。 * void unlock():釋放鎖。 * ReentrantLock是Lock的實現類、 package cn.itcast_01; import java.util.concurrent.locks.Lock; import java ...
  • 獲取python的源碼 3.x及最新版本的源碼:https://github.com/python/cpython python2.7分支的源碼:https://github.com/python/cpython/tree/v2.7.18 python官網也提供源碼下載:https://www.py ...
  • 《零基礎學Java》 輸入/輸出流 Java語言把與輸入/輸出流有關的類都放在了java.io包中。其中,所有與輸入流有關的類都是抽象類InputStream(位元組輸入流)或抽象類Reader(字元輸入流)的子類;而所有與輸出流有關的類都是抽象類OutputStream(位元組輸出流)或抽象類Writ ...
  • 前言 在開發中我們通常會對資料庫的數據進行操作,SpringBoot對關係性和非關係型資料庫的訪問操作都提供了非常好的整合支持。SpringData是spring提供的一個用於簡化資料庫訪問、支持雲服務的開源框架。它是一個傘狀項目,包含大量關係型和非關係型資料庫數據訪問解決方案,讓我們快速簡單的使用 ...
  • 10-Slices in Detail、 Slice、 Empty vs nil slice ...
  • 《零基礎學Java》 流概述 在程式開發過程中,將輸入與輸出設備之間的數據傳遞抽象為流(例如鍵盤可以輸入數據,顯示器可以顯示鍵盤輸入的數據等),按照不同的分類方式,可以將流分為不同的類型:根據操作流的數據單元,可以將流分為位元組流(操作的數據單元是一個位元組)和字元流(操作的數據單元是兩個位元組或個字元, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...