第58節:Java中的圖形界面編程-GUI

来源:https://www.cnblogs.com/dashucoding/archive/2018/11/15/9961418.html
-Advertisement-
Play Games

歡迎到我的簡書查看我的文集 前言: 是圖形用戶界面,在 中,圖形用戶界面我們用 表示,而 的完整英文為: (圖形用戶介面), 所謂圖形用戶界面就是以圖形的方式來顯示你電腦的操作界面, 我們電腦中操作的界面就是 我們 中常說的圖形用戶界面, 這樣的操作簡單明瞭. 的英文為 , 是命令行用戶介面, ...


標題圖

歡迎到我的簡書查看我的文集

前言:

GUI是圖形用戶界面,在Java中,圖形用戶界面我們用GUI表示,而GUI的完整英文為: Graphical User Interface(圖形用戶介面), 所謂圖形用戶界面就是以圖形的方式來顯示你電腦的操作界面, 我們電腦中操作的界面就是 我們Java中常說的圖形用戶界面, 這樣的操作簡單明瞭.

CLI的英文為Command Line User Interface, 是命令行用戶介面, 命令行, 這就是我們程式員常常熟悉的, 常見的Dos命令行操作, 這些常用命令式需要記住的, CLI的操作就不那麼直觀了.

JavaGUI提供了對象在 java.awtjavax.swing 兩個包中

在早年中, Java.awt為抽象視窗工具包, 英文為 Abstract Window ToolKit, 需要調用本地的系統方法來實現功能需求,屬於重量級的控制項.

而在awt的基礎上,創建了一套圖形界面系統, 從而提供了更多的組件, 而且完全是由Java實現的, 增強了移植性, 屬於輕量級的控制項. 有自己的顯示效果, 顯示自己的形狀, 平臺要求低了, 輕量級和體統嵌入的比較淺.

繼承關係

Component .png

Button按鈕,Label標簽,Checkbox覆選框,TextComponent文本組件,TextArea文本區域,TextField文本框.

組件裡面還能放入組件,在Java中我們叫容器.
window 窗體, Panel 面板
Frame小視窗,Dialog對話框,FileDialog文件對話框

GUI 佈局

Flow 流式佈局

上左下右

掃雷的格式佈局

佈局管理

常見的佈局管理器:

流式佈局管理: FlowLayout, 是從左到右的排列, 是Panel預設的佈局管理.

邊界佈局: 東南西北,中, 是Frame預設的佈局管理

網格佈局管理: GridLayout

卡片佈局管理: CardLayout

網格包佈局管理: GridBagLayout

GUI 簡單的小窗體

java.awt 包含用於創建用戶界面和繪製圖形圖像的所有類.

java.awtComponent

java.lang.Object
-> java.awt.Component

所有已實現的介面:

ImageObserver, MenuContainer, Serializable

component 是一個具有圖形表示能力的對象.

component

子類

window

java.awtFrame

java.lang.Object
-> java.awt.Component
-> java.awt Container
-> java.awt.Window
-> java.awt.Frame

實現的介面:

ImageObserver, MenuContainer, Serializable, Accessible

直接已知的子類:

JFrame

Frame是帶有標題和邊框的頂層視窗.

frame

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class FrameDemo {

    public static void main(String[] args) {

        //1,創建一個窗體。Frame
        Frame f = new Frame("my frame");
        //2, 對窗體進行基本設置。
        f.setSize(500, 400);
        f.setLocation(400, 200);
        //設置佈局。
        f.setLayout(new FlowLayout());
        
        //給窗體添加組件。
         Button but = new Button("my button");
         
         //加入一個文本框組件。
         TextField tf = new TextField(40);
        
         //將組件添加到窗體中。
         f.add(tf);
         f.add(but);
         
         //1,在按鈕上添加所需的監聽器。
         but.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("按鈕被觸發了....."+e);
                System.exit(0);

            }
        });
         
         f.addWindowListener(new WindowAdapter() {
    
            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("window closing");
                System.exit(0);
            }

            @Override
            public void windowOpened(WindowEvent e) {
                
                System.out.println("孔雀開屏!window open");
            }
        
        });
         
        but.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                if(e.getClickCount() == 2){
                    
                    System.out.println("mouse double click");
                }
            }
            
        });
         
         
        tf.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {
                
                //1,如何獲取錄入的內容。通過鍵盤事件對象獲取。
//              char key = e.getKeyChar();
//              int code = e.getKeyCode();
//              System.out.println(code+"...."+KeyEvent.getKeyText(code));
                
//              int code = e.getKeyCode();
//              if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){
//                  System.out.println("必須是0-9數字");
//                  e.consume();//直接取消預設處理方式。
//              }
                
                
                if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER){
                    System.out.println("ctrl+enter run");
                    
                }
                
            }
            
        });
         
        
        //3,讓窗體顯示。
        f.setVisible(true);
        
        System.out.println("over");
    }

}

事件監聽機制

  1. 事件源-組件
  2. 事件 - Event
  3. 監聽器 - Listener
  4. 事件處理

Button

java.awt
classButton

java.lang.Object
-> java.awt.Component
-> java.awt.Button

button

監聽事件:

addActionListener(ActionListener l)
添加指定的動作偵聽器以從此按鈕接收動作事件。

視窗適配器

MouseListener

mouseListener

public interface MouseListener extends EventListener

用於在組件上接收“有趣”滑鼠事件(按,釋放,單擊,輸入和退出)的偵聽器界面。

方法

方法的詳細信息:

mouseClicked
void mouseClicked(MouseEvent e)
在組件上單擊滑鼠按鈕時調用

mousePressed
void mousePressed(MouseEvent e)
在組件上按下滑鼠時調用

mouseReleased
void mouseReleased(MouseEvent e)
在組件上釋放滑鼠時調用

mouseEntered
void mouseEntered(MouseEvent e)
當滑鼠進入組件時調用

mouseExited
void mouseExited(MouseEvent e)
當滑鼠退出組件時調用

方法摘要

文本名稱

圖形化界面的工具

選擇

選擇2

選擇3

選擇4

選擇5

        //1,獲取路徑。通過文本框對象完成。
        String str_dir = jTextField1.getText();
        
        //2,將字元串路徑封裝成File對象。
        File dir = new File(str_dir);
        //判斷。
        if(dir.exists()&&dir.isDirectory()){
            
            
            //清空文本區域。
            jTextArea1.setText("");
            //3,獲取文件名稱列表。
            String[] names = dir.list();
            for(String name :names){
            //4,將名字顯示到文本區域。
            jTextArea1.append(name+LINE_SEPARATOR);
            }
            
        }

JFileChooser

public class JFileChooser extends JComponent implements Accessible

註意

事件監聽機制流程:

  1. 監聽器 - 將監聽器註冊到事件源
  2. 事件源 - 組件 (外部動作)
  3. 產生事件對象 - 將事件對象傳給事件處理方式

菜單繼承

繼承

MenuComponent
MenuBar,MenuItem,Menu

達叔小生:往後餘生,唯獨有你
You and me, we are family !
90後帥氣小伙,良好的開發習慣;獨立思考的能力;主動並且善於溝通
簡書博客: 達叔小生
https://www.jianshu.com/u/c785ece603d1

結語

  • 下麵我將繼續對 其他知識 深入講解 ,有興趣可以繼續關註
  • 小禮物走一走 or 點贊

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

-Advertisement-
Play Games
更多相關文章
  • 一、瞭解 基本數據類型保存在棧記憶體中,按值訪問,引用數據類型保存在堆記憶體中,按址訪問。 二、淺拷貝 淺拷貝只是複製了指向某個對象的指針,而不是複製對象本身,新舊對象其實是同一記憶體地址的數據,修改其中一個值,另一個也會動態改變。 三、深拷貝 深拷貝是真正意義上實現了數組和對象的拷貝,它創建了另外一個一 ...
  • web前端怎麼樣才能入門,首先我們要從什麼是初級web前端工程師說起: 按照我的想法,我把前端工程師分為了入門、初級、中級、高級這四個級別, 入門級別指的是瞭解什麼是前端(前端到底是什麼其實很多人還是不清楚的),瞭解基本的html、css和javascript語法(這些語方面的東西網上隨便搜一下就有 ...
  • element vue Array數組和Map對象的添加與刪除 ...
  • DDD理解 DDD體現的是對現實的充分尊重。 1.尊重業務現實,領域專家、領域語言等概念 2.尊重團隊現實 3.尊重變化 Application 對某一業務線的整體掌控,流程組裝,進度管理,存儲時機掌控。 依賴外部模塊的業務環節實現; 儘量滿足UI需求; 落地:uow提交; Domain 業務線視作 ...
  • 一、概念 繼承的缺點:類數量爆炸、設計死板以及基類加入的新功能可能並不適用於所有的子類。 裝飾者模式:動態地將責任附加到對象上,若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。一言以蔽之 —— 動態擴展類的行為。 角色:   1、抽象組件(Component):給出一個抽象類 ...
  • 系統架構設計師-軟體水平考試高級-理論-操作系統。其中涉及進程管理(PV操作等),文件管理,存儲管理,設備管理等。 ...
  • 第1章 緒論1.1 概念模型1.2 模式世界1.2.1 Christopher Alexander1.2.2 描述格式1.2.3 關於模式的抽象程度1.3 本書中的模式1.3.1 建模實例1.3.2 模式的來源1.3.3 跨領域的模式1.4 概念模型與業務過程重組1.5 模式與框架1.6 本書的使用 ...
  • 系統: CentOS 7 IP: 192.168.11.199關閉 selinux 和防火牆 # setenforce 0 # 臨時關閉,重啟後失效 # systemctl stop firewalld.service # 臨時關閉,重啟後失效 修改字元集,否則可能報 input/output er ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...