Java中GUI工具包AWT和Swing用法介紹
java 中編寫 GUI 有兩中工具包,分別為 AWT、Swing。
Swing 是 AWT 的拓展,Swing 具有比 AWT 豐富的組件和方法。
AWT 和 Swing 都能跨平臺(tái)使用;AWT 會(huì)隨著不同的系統(tǒng)平臺(tái),UI 樣式會(huì)有所變化,Swing 則不會(huì),設(shè)計(jì)完畢后在所有平臺(tái)下樣式一致。
import java.awt.*; import javax.swing.*;
一個(gè) awt 示例
下面是一個(gè)窗口示例
import java.awt.*; public class MyFrame extends Frame { public MyFrame(){ super("測試"); setSize(400,200); setVisible(true); } public static void Main(String args[]){ new MyFrame(); } }
創(chuàng)建一個(gè)窗口,要繼承 Frame
,同時(shí)會(huì)繼承 Frame 中的一些方法;
Frame 中:
- super 方法可以設(shè)置窗口標(biāo)題;
- setSize 設(shè)置窗口大小,(width,hight)
- setVisible 設(shè)置是否顯示窗口,true 顯示,false 隱藏
setLayout(new FlowLayout());用于設(shè)置窗口布局;
add(組件); 用于向窗口添加組件,例如按鈕等。
我們來向窗口添加組件
import java.awt.*; public class MyFrame extends Frame { public MyFrame(){ super("測試"); setLayout(new FlowLayout()); Button btn=new Button("Button"); Font f=new Font("宋體",Font.BOLD,28); btn.setFont(f); add(btn); setSize(400,200); setVisible(true); }
在 main 方法中啟動(dòng)窗口
public static void main(String args[]){ new MyFrame(); }
效果
事件
java 中,事件分為三個(gè)方面描述,
事件源:發(fā)生事件的對(duì)象
事件處理:委托事件處理模型
事件監(jiān)聽者:負(fù)責(zé)處理事件
首先B監(jiān)聽A,設(shè)置監(jiān)聽的內(nèi)容,并設(shè)置響應(yīng)內(nèi)容。
一旦A本身的狀態(tài)改變,就觸發(fā)C;
C執(zhí)行D
媽媽跟兒子說,你作業(yè)做完了,媽媽就讓爸爸就給你削個(gè)蘋果吃。
媽媽:事件監(jiān)控者
兒子:事件源
動(dòng)作:做完作業(yè)
事件:爸爸削個(gè)蘋果給兒子
媽媽監(jiān)控兒子,監(jiān)控是否完成作業(yè)。設(shè)置作業(yè)完成后,觸發(fā)事件:削蘋果;
兒子做完作業(yè),狀態(tài)變更,觸發(fā)事件;事件開始執(zhí)行。
簡單來說 B 告訴 A ,如果 A 怎么樣了,就去做一件事情C。
實(shí)現(xiàn)事件流程
我們繼續(xù)利用上面的窗口,實(shí)現(xiàn)按鈕點(diǎn)擊時(shí),改變窗口背景顏色。
實(shí)現(xiàn)一個(gè)事件
引入
import java.awt.event.ActionListener;
實(shí)現(xiàn)接口
class Test implements ActionListener{ public void actionPerformed(ActionEvent actionEvent) { System.out.println("執(zhí)行工作"); }
將事件注冊(cè)到控件上
package com.company; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class MyFrame extends Frame implements ActionListener { public MyFrame(){ super("測試"); setLayout(new FlowLayout()); Button btn=new Button("Button"); Font f=new Font("宋體",Font.BOLD,28); btn.setFont(f); btn.addActionListener(this::actionPerformed); add(btn); setSize(400,200); setVisible(true); } public void actionPerformed(ActionEvent actionEvent) { System.out.println("執(zhí)行工作"); setBackground(Color.BLUE); } }
按鈕有個(gè)事件監(jiān)聽器 addActionListener
,我們將要執(zhí)行的工作 actionPerformed
綁定進(jìn)去。
當(dāng)條件發(fā)生時(shí),就會(huì)觸發(fā)此工作。
媽耶,我都不知道自己在說啥了。
C# 中,事件沒有那么麻煩,也不需要這么BB。。。
另外, actionEvent ,有兩個(gè)常用方法
actionEvent.getActionCommand(); // 獲取對(duì)象名稱 actionEvent.getSource()(); // 獲取源對(duì)象
布局
AWT 中,主要有 6 中布局方式。
- FlowLayout 流式布局
默認(rèn)布局,控件從上到下,從左到右地排序。 - BorderLayout 邊緣布局
自動(dòng)停靠窗體邊緣,并且長寬隨著窗體的變化。
- GridLayout 網(wǎng)格布局
將容器分成若干行和若干列。 - CradLayout 卡片布局
像撲克牌一樣,每張牌是一個(gè)控件,多個(gè)控件疊加起來,每次只能查看一個(gè)。 - GridBagLayout 網(wǎng)格塊布局
- null 采用坐標(biāo)定位布局
創(chuàng)建一個(gè)窗體,并設(shè)置流式布局
public class MyFrame extends Frame { public MyFrame(){ super("測試"); setLayout(new FlowLayout()); } }
繼承 Frame 的窗體中,使用 setLayout方法 可以設(shè)置布局。
組件方法
如圖是 GUI 控件中常用的控件關(guān)系繼承圖。
組件分為容器(Container)和控件。
容器又分為窗體(Window)和面板(Panel)。
Component 是所有組件的父類,Component 常用方法如下
Component類(抽象類)主要方法 Color getBackground() : 獲取部件的背景色 Font getFont() : 獲取部件的顯示字體 Graphics getGraphics(): 獲取部件的Graphics屬性對(duì)象 void setBackground(Color c) : 設(shè)置部件的背景 void setEnabled(boolean b) : 是否讓部件功能有效 void setFont(Font f) : 設(shè)置部件的顯示字體 void setSize(int width,int height) : 設(shè)置部件大小 void setVisible(boolean b) : 設(shè)置部件是否可見 void setForeground(Color c) : 設(shè)置部件的前景色 Tookit getToolkit() : 取得圖形部件的工具集(Toolkit) void requestFocus() : 讓部件得到焦點(diǎn) void add(PopupMenu popup) :給部件加入彈出菜單
常用控件
文本
文本框(TextField)只能顯示一行文本,文本域(TextArea)則可以顯示、編輯多行文字。
文本框的構(gòu)造函數(shù)如下
TextField():構(gòu)造一個(gè)單行文本輸入框。? TextField(int):指定長度的單行文本輸入框。? TextField(String):指定初始內(nèi)容的單行文本輸入框。 TextField(String, int):指定長度、指定初始內(nèi)容。
文本域的構(gòu)造函數(shù)如下
TextArea( ):構(gòu)造一個(gè)文本域。 TextArea(int, int):構(gòu)造一個(gè)指定長度和寬度的文本域。 TextArea(String):構(gòu)造一個(gè)顯示指定文字的文本域。 TextArea(String, int, int):按指定長度、寬度和默認(rèn)值構(gòu)造文本域。
文本控件的常用方法有
void setEchoChar(‘*') 設(shè)置回顯字符 String getText( ) :獲取輸入框中的數(shù)據(jù) void setText(String s) :往輸入框?qū)懭霐?shù)據(jù) boolean isEditable( ):判斷輸入框是否可編輯。 void select(int start,int end):選定由開始和結(jié) 束位置指定的文本。 void selectAll( ):選定所有文本。
文本域(TextArea)中,還具有以下兩個(gè)常用方法
append(String s):將字符串添加到文本域的末尾 insert(String s,int index):將字符串插入到文本域的指定位置
文本框有兩個(gè)常用事件
- ActionEvent事件
在文本框按回車鍵時(shí)引發(fā)
注冊(cè):addActionListener()
接口:ActionListener
方法:public void actionPerformed(ActionEvent e)
- TextEvent事件
對(duì)文本輸入部件數(shù)據(jù)更改操作 (添加、修改、刪除)
注冊(cè):addTextListener()
接口:TextListener
方法:public void textValueChanged(TextEvent e)
到此這篇關(guān)于Java中GUI工具包AWT和Swing用法的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家
相關(guān)文章
Spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用
這篇文章主要介紹了spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12java編譯時(shí)與運(yùn)行時(shí)概念與實(shí)例詳解
本篇文章通過實(shí)例對(duì) java程序編譯時(shí)與運(yùn)行時(shí)進(jìn)行了詳解,需要的朋友可以參考下2017-04-04maven打包本地jar到項(xiàng)目中的方法實(shí)現(xiàn)
本文主要介紹了maven打包本地jar到項(xiàng)目中的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06解決@PathVariable對(duì)于特殊字符截?cái)嗟膯栴}
這篇文章主要介紹了解決@PathVariable對(duì)于特殊字符截?cái)嗟膯栴},具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02