Java開發筆記(一百二十四)AWT繪圖操作

来源:https://www.cnblogs.com/pinlantu/archive/2019/07/15/11191890.html
-Advertisement-
Play Games

前面介紹瞭如何使用畫筆在控制項上展示圖像,可是圖像來源於磁碟圖片,無法即興繪製個性化的圖案。所幸畫筆工具Graphics不僅能夠描繪圖像,還支持繪製常見的幾何形狀,也支持繪製文本字元串,除了繪製圖像用到的drawImage方法,Graphics還有下列常見的繪圖方法:setColor:設置畫筆的顏色。 ...


前面介紹瞭如何使用畫筆在控制項上展示圖像,可是圖像來源於磁碟圖片,無法即興繪製個性化的圖案。所幸畫筆工具Graphics不僅能夠描繪圖像,還支持繪製常見的幾何形狀,也支持繪製文本字元串,除了繪製圖像用到的drawImage方法,Graphics還有下列常見的繪圖方法:
setColor:設置畫筆的顏色。
drawLine:在指定坐標的(x1,y1)與(x2,y2)兩點之間畫條線段。
drawRect:以坐標點(x,y)為左上角,繪製指定寬高的矩形邊框。
fillRect:以坐標點(x,y)為左上角,繪製指定寬高的矩形區域。
drawRoundRect:以坐標點(x,y)為左上角,繪製指定寬高和指定圓角的圓角矩形邊框。
fillRoundRect:以坐標點(x,y)為左上角,繪製指定寬高和指定圓角的圓角矩形區域。
drawOval:以坐標點(x,y)為外切矩形的左上角,繪製指定橫縱半徑的橢圓輪廓。註意,如果橫縱半徑的數值相等,此時橢圓就變成了圓形。
fillOval:以坐標點(x,y)為外切矩形的左上角,繪製指定橫縱半徑的橢圓區域。
drawArc:以坐標點(x,y)為外切矩形的左上角,繪製指定橫縱半徑和指定角度的圓弧。
fillArc:以坐標點(x,y)為外切矩形的左上角,繪製指定橫縱半徑和指定角度的扇形。
setFont:設置畫筆的字體。
drawString:在當前位置的橫縱偏移距離處繪製文本。

此外,Graphics也支持幾種簡單的管理操作,包括平移畫筆、擦除區域、裁剪畫布等功能,對應的處理方法說明如下:
translate:平移畫筆至坐標點(x,y)。
clearRect:清除某塊矩形區域,該矩形以坐標點(x,y)為左上角,且符合指定寬高。
clipRect:裁剪某塊矩形區域,該矩形以坐標點(x,y)為左上角,且符合指定寬高。該方法的執行效果與clearRect正好相反,clearRect方法清除了矩形內部的所有圖案;而clipRect方法清除了矩形外部的所有圖案,只留下矩形內部的圖案。

繪製圖案與字元串的過程與繪製圖像一樣,都是重寫自定義控制項的paint方法,在該方法中調用畫筆對象的各種繪圖方法。接下來按照之前的圖像視圖依樣畫瓢定義一個繪畫視圖DrawView,變動之處在於繪製控制項的paint方法,並據此演示幾種圖案的實現效果。首先準備繪製一條黑色線段,線段的起點位於控制項的左上角,終點位於控制項的右下角,則相應的繪製方法示例如下:

			g.setColor(Color.BLACK); // 設置畫筆的顏色為黑色
			// 在指定坐標的(x1,y1)與(x2,y2)兩點之間畫條線段
			g.drawLine(0, 0, getWidth(), getHeight());

 

主界面的代碼比較簡單,有關繪畫視圖的調用可參考如下的代碼片段:

		Panel panelCenter = new Panel(); // 創建中央面板
		DrawView draw = new DrawView(); // 創建一個繪畫視圖
		draw.setSize(360, 180); // 設置繪畫視圖的寬高
		panelCenter.add(draw); // 在中央面板上添加繪畫視圖
		frame.add(panelCenter, BorderLayout.CENTER); // 把中央面板添加到視窗的中間位置

 

運行修改後的測試代碼,彈出的線段繪製視窗界面如下圖所示。


接著繪製一個矩形邊框,假設邊框為紅色,則對應的繪製方法如下所示:

			g.setColor(Color.RED); // 設置畫筆的顏色為紅色
			// 以坐標點(x,y)為左上角,繪製指定寬高的矩形邊框
			g.drawRect(10, 10, getWidth() - 20, getHeight() - 20);

 

同樣運行測試界面代碼,彈出的矩形繪製視窗界面如下圖所示。


再繪製一個綠色的圓角矩形,但它是實心的,此時繪製過程應當調用fillRoundRect方法:

			g.setColor(Color.GREEN); // 設置畫筆的顏色為綠色
			// 以坐標點(x,y)為左上角,繪製指定寬高和指定圓角的圓角矩形區域
			g.fillRoundRect(10, 10, getWidth() - 20, getHeight() - 20, 50, 50);

 

運行主界面的測試代碼,彈出的圓角矩形繪製視窗如下圖所示。


繼續繪製一個藍色的橢圓輪廓,註意它是空心的,此時繪製過程應當調用drawOval方法:

			g.setColor(Color.BLUE); // 設置畫筆的顏色為藍色
			// 以坐標點(x,y)為外切矩形的左上角,繪製指定橫縱半徑的橢圓輪廓
			g.drawOval(10, 10, getWidth() - 20, getHeight() - 20);

 

運行主界面的測試代碼,彈出的橢圓繪製視窗界面如下圖所示。


還可以繪製一個橙色的扇形,所謂扇形是由某段圓弧連接兩端的橫縱半徑組成,因此它相當於實心的圓弧,此時繪製過程應當調用dfillArc方法:

			g.setColor(Color.ORANGE); // 設置畫筆的顏色為橙色
			// 以坐標點(x,y)為外切矩形的左上角,繪製指定橫縱半徑和指定角度的扇形
			g.fillArc(10, 10, getWidth() - 20, getHeight() - 20, 0, 90);

 

運行主界面的測試代碼,彈出的扇形繪製視窗界面如下圖所示。


最後使用畫筆繪製幾個文字,同時指定這段文字的顏色、字體以及大小,則對應的繪製方法如下所示:

			g.setColor(Color.BLACK); // 設置畫筆的顏色為黑色
			g.setFont(new Font("大號粗體", Font.BOLD, 50)); // 設置畫筆的字體
			g.drawString("春天花會開", 50, 50); // 在當前位置的橫縱偏移距離處繪製文本

 

運行主界面的測試代碼,彈出的文字繪製視窗界面如下圖所示。

 


更多Java技術文章參見《Java開發筆記(序)章節目錄


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

-Advertisement-
Play Games
更多相關文章
  • Mybatis映射文件的SQL深入 (Mybatis今天學的不多,看了半天的mysql必知必會) 動態sql語句 if語句,查詢一個用戶的時候,有可能根據地址查詢,用戶名查詢,性別查詢等,所以需要動態sql語句 1.介面中新添加方法 2.配置文件的寫法,根據條件查詢 3.測試方法 mybatis中的 ...
  • "Add Two Numbers" Example: Code // // main.cpp // 兩個數字的加法操作 // // Created by mac on 2019/7/14. // Copyright © 2019 mac. All rights reserved. // includ ...
  • C++編譯過程 C++ 編譯過程在介紹編譯器之前,先簡單地說一下 C++ 的編譯過程,以便理解編譯器的工作。編譯(compiling)並不意味著只創建僅僅一個可執行文件。創建一個可執行文件是一個多級過程,其中最重要的過程是預處理(preprocessing),編譯(compliation)和鏈接(l ...
  • 一、基本簡介 1、基礎概念 在矩陣中,若數值為0的元素數目遠遠多於非0元素的數目,並且非0元素分佈沒有規律時,則稱該矩陣為稀疏矩陣;與之相反,若非0元素數目占大多數時,則稱該矩陣為稠密矩陣。定義非零元素的總數比上矩陣所有元素的總數為矩陣的稠密度。 2、處理方式 3、圖解描述 4、五子棋場景 二、代碼 ...
  • 1.str.capitalize() 將原字元串內的首字母轉成大寫,其他部分小寫,再返回新字元串 Output: 2.str.upper() 將原字元串的字母轉為大寫 Output: 3.str.lower() 將原字元串的字母轉為小寫 Output: 4.str.swapcase() 將原字元串內 ...
  • [TOC] 上篇已經對IoC容器的設計進行了分析( "Spring源碼閱讀 IoC容器解析" ),本篇將對 經典的繼承層次圖進行詳細的分析,在心中形成一個大致的印象,以便後面一步步調試源碼的時候,不會太眼花繚亂。讓我們一步步的前進吧... 繼承層次圖概覽 使用IDEA的繼承層次工具生成如下的圖(選中 ...
  • ![](http://ww2.sinaimg.cn/large/006tNc79gy1g4r7dbwihmj30jg0a83yy.jpg) ## 前言 在日常的開發模式里,前端負責頁面和動態腳本的處理,服務端負責業務邏輯和介面的實現。當前端需要服務端提供的介面實現動態數據展示和交互時,服務端完成介面 ...
  • 1.儘量在合適的場合使用單例 使用單例可以減輕載入的負擔,縮短載入的時間,提高載入的效率,但並不是所有地方都適用於單例,簡單來說,單例主要適用於以下三個方面: 控制資源的使用,通過線程同步來控制資源的併發訪問; 控制實例的產生,以達到節約資源的目的; 控制數據共用,在不建立直接關聯的條件下,讓多個不 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...