【Java基础】之AWT,一篇文章搞懂awt(包含绘图)
🌈博客主頁:強子的博客
📅 發文時間:2022.3.15
🎈 一定存在只有你才能做成的事
🌹 博主水平有限,如有錯誤,歡迎指正
歡迎給位👍收藏💎評論?
Java awt
- 👑👑 AWT
- 📜📜Java AWT簡介 (Introduction to Java AWT)
- 🏮🏮層次結構 (Hierarchy)
- 💐💐2.4 LayoutManage布局管理器
- 小案例
- 🌺🌺2.5 AWT中常用組件()
- 🧨🧨亂碼問題
- 🎠🎠2.6 事件處理
- 🎧🎧監聽器案例
- 菜單小案例
- 🎃🎃繪圖案例
👑👑 AWT
📜📜Java AWT簡介 (Introduction to Java AWT)
Java AWT (Abstract Window Toolkit) package is a library used for designing graphical user interfaces.
Java AWT(抽象窗口工具包)軟件包是用于設計圖形用戶界面的庫。
It contains classes for placing various user intractable components and graphics. However, the components of this class are platform dependent. They are heavy and rely on the OS for their functioning.
它包含用于放置各種用戶難以處理的組件和圖形的類。 但是,此類的組件取決于平臺。 它們很重,并且依靠OS來運行。
The AWT package has classes using which we can create TextBoxes, CheckBoxes, RadioButton, List, etc.
AWT包具有一些類,通過這些類可以創建TextBoxes , CheckBoxes , RadioButton , List等。
🏮🏮層次結構 (Hierarchy)
java.awt包提供了基本的GUI設計工具,主要包括組件(Component)、容器(Container)和布局管理器(LayoutManager); Java的圖形用戶界面的最基本組成部分是組件(Component),組件不能獨立地顯示出來,必須將組件放在一定的容器中才可以顯示出來; 組件(Component)
類的部分重要的成員方法有:
getComponentAt(int x,int y) //獲得坐標(x,y)上的組件對象 getFont() //獲得組件的字體
paint(Grahics g) //繪制組件
repaint() //重新繪制組件
setVisible(Boolean b) //設置組件是否可見
Container是一個類,實際上是Component的子類,因此容器本身也是一個組件,具有組件的所有性質,但是它的主要功能是用來放置其他組件和容器;
2.3.2 常見API
Component作為基類,提供了如下常用的方法來設置組件的大小、位置、可見性等。
方法簽名 方法功能
setLocation(int x, int y)
設置組件的位置。
setSize(int width, int reight)
設置組件的大小。
setBounds(int x, int y, int width, int height)
同時設置組件的位置、大小。
setVisible(Boolean b)
設置該組件的可見性。
Container作為容器根類,提供了如下方法來訪問容器中的組件
方法簽名 方法功能
Component add(Componen tcomp)
向容器中添加其他組件(該組件既可以是普通組件,也可以是容器),并返回被添加的組件。
Component getComponentAt(int x, int y)返回指定點的組件。
int getComponentCount():返回該容器內組件的數量。
Component[] getComponents()返回該容器內的所有組件。
2.3.3 容器演示
程序明明向 ScrollPane 容器中添加了 一個文本框和一個按鈕,但只能看到 一個按鈕,卻看不到文本框 ,這是為什么 呢?這是因為ScrollPane 使用 BorderLayout 布局管理器的緣故,而 BorderLayout 導致了該容器中只有一個組件被顯示出來。
💐💐2.4 LayoutManage布局管理器
之前,我們介紹了Component中有一個方法 setBounds()可以設置當前容器的位置和大小,但是我們需要明確一件事,如果我們手動的為組件設置位置和大小的話,就會造成程序的不通用性,例如:
Label label new = Label(“你好,世界”);
創建了一個lable組件,很多情況下,我們需要讓lable組件的寬和“你好,世界”這個字符串自身的寬高一致,這種大小稱為最佳大小。由于操作系統存在差異,例如在windows上,我們要達到這樣的效果,需要把該Lable組件的寬和高分別設置為100px,20px,但是在Linux操作系統上,可能需要把Lable組件的寬和高分別設置為120px,24px,才能達到同樣的效果。
如果要讓我么的程序在不同的操作系統下,都有相同的使用體驗,那么手動設置組件的位置和大小,無疑是一種災難,因為有太多的組件,需要分別設置不同操作系統下的大小和位置。為了解決這個問題,Java提供了LayoutManager布局管理器,可以根據運行平臺來自動調整組件大小,程序員不用再手動設置組件的大小和位置了,只需要為容器選擇合適的布局管理器即可。
2.4.1 FlowLayout
在 FlowLayout布局管理器 中,組件像水流一樣向某方向流動 (排列) ,遇到障礙(邊界)就折回,重頭開始排列在默認情況下,FlowLayout 布局管理器從左向右排列所有組件,遇到邊界就會折回下一行重新開始。
構造方法 方法功能
FlowLayout()
使用默認的對齊方式及默認的垂直間距、水平間距創建FlowLayout布
局管理器。
FlowLayout(int align)
使用指定的對齊方式及默認的垂直間距、水平間距創建 FlowLayout 布局管理器。
FlowLayout(int align,int hgap,int vgap)
使用指定的對齊方式及指定的垂直問距、水平間距創建FlowLayout布局管理器。
FlowLayout 中組件的排列方向(從左向右、從右向左、從中間向兩邊等),該參數應該使用FlowLayout類的靜態常
小案例
package java2.awt;import java.awt.*;public class WindowDome {public static void main(String[] args) {Frame frame = new Frame("Panel");frame.setLayout(new FlowLayout(FlowLayout.CENTER,30,20));for (int i = 0; i < 100; i++) {frame.add(new Button("按鈕" + i));}//用for循環創建100個按鈕,可能會亂碼,后面有解決方法 // Panel panel = new Panel(); // panel.add(new TextField("測試文本")); // panel.add(new Button("測試按鈕")); // frame.add(panel); // frame.setBounds(200,200,500,300);frame.pack();//窗口最佳大小frame.setVisible (true);//設為可見} }2.4.2 BorderLayout
BorderLayout將容器分為EAST、SOUTH、WEST、 NORTH、CENTER五個區域,普通組件可以被放置在這5 個區域的任意一個中。 BorderLayout布局 管理器的布局示意圖如圖所示。
NORTH
WEST CENTER EAST
? SOUTH
當改變使用BorderLayout的容器大小時, NORTH、SOUTH和CENTER區域水平調整,而 EAST、 WEST和CENTER 區域垂直調整。使用BorderLayout有如下兩個注意點:
構造方法 方法功能
BorderLayout()
使用默認的水平間距、垂直間距創建BorderLayout布局管理器。
BorderLayout(int hgap,int vgap):
使用指定的水平間距、垂直間距創建 BorderLayout 布局管理器。
2.4.3GridLayout
GridLayout 布局管理器將容器分割成縱橫線分隔的網格 ,每個網格所占的區域大小相同。當向使用GridLayout 布局管理器的容器中添加組件時, 默認從左向右、 從上向下依次添加到每個網格中 。 與FlowLayout不同的是,放置在 GridLayout 布局管理器中的各組件的大小由組件所處的區域決定(每 個組件將自動占滿整個區域)。
構造方法 方法功能
GridLayout(int rows,in t cols)
采用指定的行數、列數,以及默認的橫向間距、縱向間距將容器 分
割成多個網格
GridLayout(int rows,int cols,int hgap,int vgap)
采用指定 的行數、列數 ,以及指定的橫向間距、 縱向間距將容器
分割成多個網格。
案傷
使用Frame+Panel,配合FlowLayout和GridLayout完成一個計算器效果。
效果
2.4.4GridBagLayout
了解即可,學完swing會有更強大的布局管理器
GridBagLayout 布局管理器的功能最強大,但也最復雜,與GridLayout布局管理器不同的是,在GridBagLayout 布局管理器中,一個組件可以跨越一個或多個網格 , 并可以設置各網格的大小互不相同,從而增加了布局的靈活性 。 當窗口的大小發生變化時 , GridBagLayout 布局管理器也可以準確地控制窗口各部分的拉
伸。
由于在GridBagLayout布局中,每個組件可以占用多個網格,此時,我們往容器中添加組件的時候,就需要具體的控制每個組件占用多少個網格,java提供的GridBagConstaints類,與特定的組件綁定,可以完成具體大小和跨越性的設置。
GridBagConstraints API:
成員變量 含義
gridx 設置受該對象控制的GUI組件左上角所在網格的橫向索引
gridy 設置受該對象控制的GUI組件左上角所在網格的縱向索引
2.4.5 CardLayout
CardLayout 布局管理器以時間而非空間來管理它里面的組件,它將加入容器的所有組件看成一疊卡片(每個卡片其實就是一個組件),每次只有最上面的那個 Component 才可見。就好像一副撲克牌,它們疊在一起,每次只有最上面的一張撲克牌才可見.
方法名稱 方法功能
CardLayout() 創建默認的 CardLayout 布局管理器。
CardLayout(int hgap,int vgap)通過指定卡片與容器左右邊界的間距( hgap)、上下邊界 Cvgap)的間距來創建 CardLayout 布局管理器
first(Container target) 顯示target 容器中的第一張卡片.
last(Container target) 顯示target 容器中的最后一張卡片.
previous(Container target) 顯示target容器中的前一張卡片.
next(Container target) 顯示target 容器中的后一張卡片.
show(Container taget,String name)顯示 target 容器中指定名字的卡片.
使用Frame和Panel以及CardLayout完成下圖中的效果,點擊底部 按鈕,切換卡片
2.4.6 BoxLayout
為了簡化開發,SwingI引入了一個新的布局管理器:BoxLayout。BoxLayout可以在垂直和 水平兩個方向上擺放GUI組件,BoxLayout 提供了如下一個簡單的構造器:
方法名稱 方法功能
BoxLayout(Container target, int axis)指定創建基于 target 容器的 BoxLayout 布局管理器,該布局管理器里的組件按axis 方向排列。其中 axis 有 BoxLayout.X_AXIS( 橫向)和 BoxLayout.Y _AXIS (縱向)兩個方向。
在java.swing包中,提供了一個新的容器Box,該容器的默認布局管理器就是BoxLayout,大多數情況下,使用Box容器去容納多個GUI組件,然后再把Box容器作為一個組件,添加到其他的容器中,從而形成整體窗口布局。
方法名稱 方法功能
static Box createHorizontalBox()
創建一個水平排列組件的 Box 容器。
static Box createVerticalBox()
創建一個垂直排列組件的 Box 容器。
通過之前的兩個BoxLayout演示,我們會發現,被它管理的容器中的組件之間是沒有間隔的,不是特別的美觀,但之前學習的幾種布局,組件之間都會有一些間距,那使用BoxLayout如何給組件設置間距呢?
其實很簡單,我們只需要在原有的組件需要間隔的地方,添加間隔即可,而每個間隔可以是一個組件,只不過該組件沒有內容,僅僅起到一種分隔的作用。
Box類中,提供了5個方便的靜態方法來生成這些間隔組件:
方法名稱 方法功能
static Component createHorizontalGlue()
創建一條水平 Glue (可在兩個方向上同時拉伸的間距)
static Component createVerticalGlue()
創建一條垂直 Glue (可在兩個方向上同時拉伸的間距 )
static Component createHorizontalStrut(int width)
創建一條指定寬度(寬度固定了,不能拉伸)的水平Strut (可在垂直方向上拉伸的間距)
static Component createVerticalStrut(int height)
創建一條指定高度(高度固定了,不能拉伸)的垂直Strut (可在水平方向上拉伸的間距)
🌺🌺2.5 AWT中常用組件()
2.5.1 基本組件
組件名 功能
Button 按鈕
Canvas 用于繪圖的畫布
Checkbox復選框組件(也可當做單選框組件使用)
CheckboxGroup用于將多個Checkbox 組件組合成一組,一組Checkbox 組件將只有一個可以被選中,即全部變成單選框組件
Choice 下拉選擇框
Frame 窗口 ,在 GUI 程序里通過該類創建窗口
Label 標簽類,用于放置提示性文本
List 列表框組件,可以添加多項條目
Panel 不能單獨存在基本容器類,必須放到其他容器中
Scrollbar 滑動條組件。如果需要用戶輸入位于某個范圍的值 , 就可以使用滑動條組件 ,比如調色板中設置 RGB 的三個值所用的滑動條。當創建一個滑動條時,必須指定它的方向、初始值、 滑塊的大小、最小值和最大值。
ScrollPane 帶水平及垂直滾動條的容器組件
TextArea 多行文本域
TextField 單行文本框
2.5.2 對話框Dialog
2.5.2.1 Dialog
Dialog 是 Window 類的子類,是 一個容器類,屬于特殊組件 .對話框是可以獨立存在的頂級窗口,因此用法與普通窗口的用法幾乎完全一樣,但是使用對話框需要注意下面兩點:
· 對話框通常依賴于其他窗口,就是通常需要有一個父窗口;
? 對話框有非模式(non-modal)和模式(modal)兩種,當某個模式對話框被打開后,該模式對話框總是位于它的父窗口之上,在模式對話框被關閉之前,父窗口無法獲得焦點。
方法名稱
Dialog(Frame owner, String title, boolean modal)
方法功能:
創建一個對話框對象:
owner:當前對話框的父窗口
title:當前對話框的標題
modal:當前對話框是否是模式對話框,true/false
2.5.2.2FileDialog
Dialog 類還有一個子類:FileDialog ,它代表一個文件對話框,用于打開或者保存 文件,需要注意的是FileDialog無法指定模態或者非模態,這是因為 FileDialog 依賴于運行平臺的實現,如果運行平臺的文件對話框是模態的,那么 FileDialog 也是模態的;否則就是非模態的。
方法名稱 方法功能
FileDialog(Frame parent,String title, int mode)
創建一個文件對話框:
parent:指定父窗口
title:對話框標題
mode:文件對話框類型,如果指定為FileDialog.LOAD,用于打開文件,如果指定為FileDialog.SAVE,用于保存文件
String getDirectory()獲取被打開或保存文件的絕對路徑
String getFile() 獲取被打開或保存文件的文件名
🧨🧨亂碼問題
import java.awt.*; import java.awt.event.*;public class MenuDome {private Frame frame = new Frame("菜單");MenuBar menuBar = new MenuBar();Menu fileMenu = new Menu("文件");Menu editMenu = new Menu("編輯");Menu formatMenu = new Menu("注釋");MenuItem auto = new MenuItem("自動換行");MenuItem copy = new MenuItem("復制");MenuItem paste = new MenuItem("粘貼");MenuItem comment = new MenuItem("注釋 ctrl + shift",new MenuShortcut(KeyEvent.VK_Q,true));TextArea ta = new TextArea(4,60);public void init(){comment.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {ta.append("點擊" + e.getActionCommand() + "\n");}});formatMenu.add(comment);editMenu.add(auto);editMenu.add(copy);editMenu.add(paste);editMenu.add(formatMenu);menuBar.add(fileMenu);menuBar.add(editMenu);frame.setMenuBar(menuBar);frame.add(ta);frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});frame.pack();frame.setVisible(true);}public static void main(String[] args) {new MenuDome().init();} }可以看到,此時菜單欄出現了亂碼,別慌,只是編碼問題
按圖一步一步來編輯配置
1.在右上角選項欄找到編輯配置
2.
3.在VM這一欄輸入-Dfile.encoding=gbk
記得點應用和確定
🎠🎠2.6 事件處理
前面介紹了如何放置各種組件,從而得到了豐富多彩的圖形界面,但這些界面還不能響應用戶的任何操作。比如單擊前面所有窗口右上角的"X"按鈕,但窗口依然不會關閉。因為在 AWT 編程中 ,所有用戶的操作,都必須都需要經過一套事件處理機制來完成,而 Frame 和組件本身并沒有事件處理能力。
2.6.1 GUI事件處理機制
定義:當在某個組件上發生某些操作的時候,會自動的觸發一段代碼的執行。
在GUI事件處理機制中涉及到4個重要的概念需要理解:
事件源(Event Source):操作發生的場所,通常指某個組件,例如按鈕、窗口等;
事件(Event):在事件源上發生的操作可以叫做事件,GUI會把事件都封裝到一個Event對象中,如果需要知道該事件的詳細信息,就可以通過Event對象來獲取。
事件監聽器(Event Listener):當在某個事件源上發生了某個事件,事件監聽器就可以對這個事件進行處理。
注冊監聽:把某個事件監聽器(A)通過某個事件(B)綁定到某個事件源?上,當在事件源C上發生了事件B之后,那么事件監聽器A的代碼就會自動執行。
2.6.2 GUI中常見事件和事件監聽器
事件監聽器必須實現事件監聽器接口,AWT提供了大量的事件監聽器接口用于實現不同類型的事件監聽器,用于監聽不同類型的事件。AWT中提供了豐富的事件類,用于封裝不同組件上所發生的特定操作,AWT的事件類都是AWTEvent類的子類,AWTEvent是EventObject的子類。
2.6.2.1事件
AWT把事件分為了兩大類:
1.低級事件:這類事件是基于某個特定動作的事件。比如進入、點擊、拖放等動作的鼠標事件,再比如得到焦點和失去焦點等焦點事件。
事件 觸發時機
ComponentEvent組件事件,當組件尺寸發生變化、位置發生移動、顯示/隱藏狀態發生改變時觸發該事件。
ContainerEvent
容器事件,當容器里發生添加組件、刪除組件時觸發該事件。
WindowEvent窗口事件,當窗 口狀態發生改變(如打開、關閉、最大化、最小化)時觸發該事件。
FocusEvent
焦點事件,當組件得到焦點或失去焦點 時觸發該事件 。
KeyEvent
鍵盤事件,當按鍵被按下、松開、單擊時觸發該事件。
MouseEvent
鼠標事件,當進行單擊、按下、松開、移動鼠標等動作 時觸發該事件。
*PaintEvent組件繪制事件,該事件是一個特殊的事件類型,當GUI組件調用 update/paint 方法來呈現自身時觸發該事件,該事件并非專用于事件處理模型 。
2.高級事件:這類事件并不會基于某個特定動作,而是根據功能含義定義的事件。
事件 觸發時機
ActionEvent動作事件,當按鈕、菜單項被單擊,在 TextField 中按 Enter鍵時觸發
AjustmentEvent調節事件,在滑動條上移動滑塊以調節數值時觸發該事件。
ItemEvent選項事件,當用戶選中某項,或取消選中某項時觸發該事件。
TextEvent文本事件,當文本框、文本域里的文本發生改變時觸發該事件。
2.6.2事件監聽器
不同的事件需要使用不同的監聽器監聽,不同的監聽器需要實現不同的監聽器接口,當指定事件發生后,事件監聽器就會調用所包含的事件處理器(實例方法)來處理事件。
事件類別 描述信息 監聽器接口名
ActionEvent 激活組 ActionListener
ItemEvent 選擇了某些項目ItemListener
MouseEvent 鼠標移動 MouseMotionListener
MouseEvent 鼠標點擊等 MouseListener
KeyEvent 鍵盤輸入 KeyListener
FocusEvent 組件收到或失去焦點FocusListener
AdjustmentEvent 移動了滾動條等組件AdjustmentListener
ComponentEvent對象移動縮放顯示隱藏等ComponentListener
WindowEvent 窗口收到窗口級事件 WindowListener
ContainerEvent 容器中增加刪除了組件ContainerListener
TextEvent 文本字段或文本區發生改變TextListener
🎧🎧監聽器案例
將操作在運行款顯示出來
2.7 菜單組件
前面講解了如果構建GUI界面,其實就是把一些GUI的組件,按照一定的布局放入到容器中展示就可以了。在實際開發中,除了主界面,還有一類比較重要的內容就是菜單相關組件,可以通過菜單相關組件很方便的使用特定的功能,在AWT中,菜單相關組件的使用和之前學習的組件是一模一樣的,只需要把菜單條、菜單、菜單項組合
到一起,按照一定的布局,放入到容器中即可。
下表中給出常見的菜單相關組件:
菜單組件名稱 功能
MenuBar 菜單條 ,菜單的容器。
Menu 菜單組件,菜單項的容器。它也是Menultem的子類,所以可作為菜單項使用
PopupMenu 上下文菜單組件(右鍵菜單組件)
Menultem 菜單項組件。
CheckboxMenultem 復選框菜單項組件
菜單相關組件使用:
1.準備菜單項組件,這些組件可以是Menultem及其子類對象
2.準備菜單組件Menu或者PopupMenu(右擊彈出子菜單),把第一步中準備好的菜單項組件添加進來;
3.準備菜單條組件MenuBar,把第二步中準備好的菜單組件Menu添加進來;
4.把第三步中準備好的菜單條組件添加到窗口對象中顯示。
小技巧:
1.如果要在某個菜單的菜單項之間添加分割線,那么只需要調用Menu的add(new Menultem(“-”) 即可。
2.如果要給某個菜單項關聯快捷鍵功能,那么只需要在創建菜單項對象時設置即可,例如給菜單項關聯ctrl+shift+Q 快捷鍵,只需要:new Menultem(“菜單項名字”,new MenuShortcut(KeyEvent.VK_Q,true);
菜單小案例
實現如下
import java.awt.*; import java.awt.event.*;public class MenuDome {private Frame frame = new Frame("菜單");MenuBar menuBar = new MenuBar();Menu fileMenu = new Menu("文件");Menu editMenu = new Menu("編輯");Menu formatMenu = new Menu("注釋");MenuItem auto = new MenuItem("自動換行");MenuItem copy = new MenuItem("復制");MenuItem paste = new MenuItem("粘貼");MenuItem comment = new MenuItem("注釋 ctrl + shift",new MenuShortcut(KeyEvent.VK_Q,true));TextArea ta = new TextArea(4,60);public void init(){comment.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {ta.append("點擊" + e.getActionCommand() + "\n");}});formatMenu.add(comment);editMenu.add(auto);editMenu.add(copy);editMenu.add(paste);editMenu.add(formatMenu);menuBar.add(fileMenu);menuBar.add(editMenu);frame.setMenuBar(menuBar);frame.add(ta);frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});frame.pack();frame.setVisible(true);}public static void main(String[] args) {new MenuDome().init();} }2.8 繪圖
很多程序如各種游戲都需要在窗口中繪制各種圖形,除此之外,即使在開發JavaEE項目時, 有 時候也必須"動態"地向客戶 端生成各種圖形、圖表,比如 圖形驗證碼、統計圖等,這都需要利用AWT的繪圖功能。
2.8.1 組件繪圖原理
之前我們已經學習過很多組件,例如Button、Frame、Checkbox等等,不同的組件,展示出來的圖形都不一樣,其實這些組件展示出來的圖形,其本質就是用AWT的繪圖來完成的。
在AWT中,真正提供繪圖功能的是Graphics對象,那么Component組件和Graphics對象存在什么關系,才能讓Component繪制自身圖形呢?在Component類中,提供了下列三個方法來完成組件圖形的繪制與刷新:
paint(Graphics g):繪制組件的外觀;
update(Graphics g):內部調用paint方法,刷新組件外觀;
repaint():調用update方法,刷新組件外觀;
2.8.2 Graphics對象的使用
實際生活中如果需要畫圖,首先我們得準備一張紙,然后在拿一支畫筆,配和一些顏色,就可以在紙上畫出來各種各樣的圖形,例如圓圈、矩形等等。程序中繪圖也一樣,也需要畫布,畫筆,顏料等等。AWT中提供了Canvas類充當畫布,提供了Graphics類來充當畫筆,通過調用Graphics對象的setColor()方法可以給畫筆設置顏色。
畫圖的步驟:
1.自定義類,繼承Canvas類,重寫paint(Graphics g)方法完成畫圖;
2.在paint方法內部,真正開始畫圖之前調用Graphics對象的setColor()、setFont()等方法設置畫筆的顏色、字體等屬性;o
3.調用Graphics畫筆的drawXxx()方法開始畫圖。
其實畫圖的核心就在于使用Graphics畫筆在Canvas畫布上畫出什么顏色、什么樣式的圖形,所以核心在畫筆上下表中列出了Graphics類中常用的一些方法:
有法名稱 方法功能
setColor(Color c)設置顏色
setFont(Font font)設置字體
drawLine()繪制直線
drawRect()繪制矩形
drawRoundRect()繪制圓角矩形
drawOval()繪制橢圓形
drawPolygon()繪制多邊形
drawArc()繪制圓弧
drawPolyline()繪制折線
fillRect()填充矩形區域
fillRoundRect()填充圓角矩形區域
fillOval()填充橢圓區域
fillPolygon()填充多邊形區域
fillArc()填充圓弧對應的扇形區域
drawlmage()繪制位圖
🎃🎃繪圖案例
需求:編寫一個窗口實現繪制矩形和圓形
總結
以上是生活随笔為你收集整理的【Java基础】之AWT,一篇文章搞懂awt(包含绘图)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 圣诞节海报
- 下一篇: 仿《雷霆战机》飞行射击手游开发--子弹、