Java圖形化界面設(shè)計(jì)之容器(JFrame)詳解
Java圖形化界面設(shè)計(jì)——容器(JFrame)
程序是為了方便用戶(hù)使用的,因此實(shí)現(xiàn)圖形化界面的程序編寫(xiě)是所有編程語(yǔ)言發(fā)展的必然趨勢(shì),在命令提示符下運(yùn)行的程序可以讓我們了解java程序的基本知識(shí)體系結(jié)構(gòu),現(xiàn)在就進(jìn)入java圖形化界面編程。
一、Java基本類(lèi)(JFC)
Java基本類(lèi)(“JavaFoundationClasses”,JFC),由一些軟件包組成。這些軟件包主要包括下面一些應(yīng)用程序接口(API):
·抽象窗口工具集(AWT)(1.1及以上版本)。
·Swing構(gòu)件。
·Java2D應(yīng)用程序接口(2DAPI)。
·兼容程序接口。
上面列出的這些應(yīng)用程序接口可難會(huì)出現(xiàn)在多個(gè)軟件包中。例如:2DAPI在Java.awt和Java.awt.image軟件包中都存在,雖然像Java.awt.geom等一些特殊的軟件包也支持2DAPI,但是大量的2DAPI類(lèi)都存在于Java.awt軟件包中。
AWT(1.1及以上版本)是JFC的核心。AWT為JFC的構(gòu)成提供了以下基本結(jié)構(gòu):
·代理事件模型。
·輕量構(gòu)件。
·剪貼板和數(shù)據(jù)傳輸。
·打印和無(wú)鼠標(biāo)操作。
1、AWTAbstractWindowToolkit(AWT)抽象窗口工具包
AWT是比較舊的雙介面函式庫(kù),它依然高度倚賴(lài)各作業(yè)平臺(tái)自身所具備的繪圖功效機(jī)能,且用一個(gè)比包容程式(Wrapper)還小的設(shè)計(jì)還去除、吸收各作業(yè)平臺(tái)間的繪圖功能機(jī)能差異,以致Java程式在跨平臺(tái)移攜后的繪圖呈現(xiàn)不夠一致,這使得AWT遭受到眾多的批評(píng)。這意味著:AWT的Widget倚賴(lài)作業(yè)平臺(tái)自身原有的Widget功效機(jī)能,程式設(shè)計(jì)師在開(kāi)發(fā)撰寫(xiě)時(shí)必須去了解各作業(yè)平臺(tái)在Widget方面的差異性,如此便偏離了Java程式語(yǔ)言最初的宗旨:跨平臺(tái)一致性。
AWT由java.awt包提供,其提供了支持GUI設(shè)計(jì)的類(lèi)和接口,而又AWT提供的組建一般稱(chēng)之為重量級(jí)組件,其是由本地方法來(lái)實(shí)現(xiàn)其功能的。AWT的特點(diǎn):
lAWT中的圖形函數(shù)與操作系統(tǒng)所提供的圖形函數(shù)之間有著一一對(duì)應(yīng)的關(guān)系
lAWT通過(guò)犧牲功能來(lái)實(shí)現(xiàn)其平臺(tái)無(wú)關(guān)性
lAWT不能滿(mǎn)足圖形化用戶(hù)界面發(fā)展的需要
2、Swing包
為了解決AWT組件的缺陷,特別是跨平臺(tái)的問(wèn)題,在JDK1.2版本后提供了新的Swing包,有javax.swing提供,Swing是在AWT的基礎(chǔ)上構(gòu)建的一套新的圖形界面組件,所有組建均是由java書(shū)寫(xiě),具有良好的跨平臺(tái)性,由于Swing沒(méi)有使用本地方法實(shí)現(xiàn)圖形功能,因此提出把Swing組件稱(chēng)之為輕量級(jí)組件。
注意:Swing組建是在AWT基礎(chǔ)上建立的,而不是替代AWT的,AWT是根基,Swing是發(fā)展。
Swing組件幾乎都是輕量組件,那些頂層容器:窗體,小應(yīng)用程序、窗口和對(duì)話(huà)框除外。因?yàn)檩p量組件是在其容器的窗口中繪制的,而不是在自己的窗口中繪制的,所以輕量組件最終必須包含在一個(gè)重量容器中。因此,Swing的窗體、小應(yīng)用程序、窗口和對(duì)話(huà)框都必須是重量組件,以便提供一個(gè)可以在其繪制Swing輕量組件的窗口。
Swing包括250多個(gè)類(lèi),其中有些是UI組件,有些是支持類(lèi)。為了把UI組件和支持類(lèi)區(qū)分開(kāi),Swing組件的名字以J開(kāi)頭。表1-1列出了Swing提供的J組件。用斜體字表示的組件是AWT組件的替代組件。
表1-1SwingUI組件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
組件類(lèi) 描述
─────────────────────────────────
JApplet Java.applet.Applet類(lèi)的擴(kuò)展,它含有JRootPane的一個(gè)實(shí)例
JButton 能顯示文本和圖形的按鈕,它是AWT按鈕組件的替代組件
JCheckBox 能顯示文本和圖形的復(fù)選框,它是AWT選擇組件的替代組件
JCheckBoxMenuItem 一個(gè)復(fù)選框菜單項(xiàng),它是AWT的復(fù)選框菜單項(xiàng)組件的替代組件
JComboBox 帶下拉列表的文本框,它是AWT選擇組件的替代組件
JComponent 所有輕量J組件的基類(lèi)
JDesktopPane 內(nèi)部窗體的容器
JDialog Swing對(duì)話(huà)框的基類(lèi),它擴(kuò)展了AWT Dialot類(lèi)
JEditorPane 用于編輯文本的文本窗格
JFrame 擴(kuò)展java.awt.Frame的外部窗體
JInternalFrame 在JDesktopPane中出現(xiàn)的內(nèi)部窗體
JLabel 可顯示文本和圖標(biāo)的標(biāo)簽,它是AWT標(biāo)簽組件的替代組件
JLayeredPane 能夠在不同層上顯示組件的容器
JList 顯示選項(xiàng)列表的組件,它是AWT列表組件的替代組件
JMenu 菜單條中顯示的一個(gè)菜單,它是AWT菜單組件的替代組件
JMenuBar 用于顯示菜單的菜單條,它是AWT菜單條組件的替代組件
JMenuItem 菜單項(xiàng),它是AWT菜單項(xiàng)組件的替代組件
JOptionPane 顯示標(biāo)準(zhǔn)的對(duì)話(huà)框,如:消息和問(wèn)題對(duì)話(huà)框
JPanel 通用容器,它是AWT面板和畫(huà)布組件的替代組件
JPasswordfield JTextField的擴(kuò)展,使輸入的字符不可見(jiàn)
JPopupMenu 彈出式菜單,它是AWT彈出式菜單組件的替代組件
JProgressBar 進(jìn)度指示器
JRadioButton 單選按鈕,它是AWT復(fù)選框組件的替代組件
JRootPane 頂層容器,它包含一個(gè)玻璃窗格,一個(gè)層窗格,一個(gè)內(nèi)容窗格和一個(gè)可選的菜單條
JScrollBar 滾動(dòng)條,它是AWT滾動(dòng)條組件的替代組件
JScrollPane 滾動(dòng)窗格,它是AWT滾動(dòng)窗格組件的替代組件
JSeparator 水平或垂直分隔條
JSlider 滑桿
JSplitPane 有兩個(gè)分隔區(qū)的容器,這兩個(gè)分隔區(qū)可以水平排列或者垂直排列且分隔區(qū)的大小能自動(dòng)調(diào)整
JTabbedPane 帶選項(xiàng)卡的窗格
JTable 表格
JTableHeader 表格頭
JTextArea 用于輸入多行文本的文本域,它是AWT文本域組件的替代組件
JTestComponent 文本組件的基類(lèi),它替代AWT的TextComponent類(lèi)
JTextField 單行文本域,它替代AWT的單行文本域組件
JTextPane 簡(jiǎn)單的文本編輯器
JToggleButton 兩種狀態(tài)的按鈕,它是JCheckBox和JRadioButton組件的基類(lèi)
JToolBar 工具條
JToolTip 當(dāng)光標(biāo)停留在一個(gè)組件上時(shí),該組件上顯示的一行文字
JTree 用于按鈕層次組織數(shù)據(jù)的結(jié)構(gòu)控件
JViesport 用于瀏覽可滾動(dòng)組件的視口
JWindow 外部窗口,它是java.awt.Window的擴(kuò)展
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
注:斜體字表示的是AWT的替代組件
二、AWT和Swing的區(qū)別
AWT是AbstractWindowToolKit(抽象窗口工具包)的縮寫(xiě),這個(gè)工具包提供了一套與本地圖形界面進(jìn)行交互的接口。AWT中的圖形函數(shù)與操作系統(tǒng)所提供的圖形函數(shù)之間有著一一對(duì)應(yīng)的關(guān)系,我們把它稱(chēng)為peers。也就是說(shuō),當(dāng)我們利用AWT來(lái)構(gòu)件圖形用戶(hù)界面的時(shí)候,我們實(shí)際上是在利用操作系統(tǒng)所提供的圖形庫(kù)。由于不同操作系統(tǒng)的圖形庫(kù)所提供的功能是不一樣的,在一個(gè)平臺(tái)上存在的功能在另外一個(gè)平臺(tái)上則可能不存在。為了實(shí)現(xiàn)Java語(yǔ)言所宣稱(chēng)的"一次編譯,到處運(yùn)行"的概念,AWT不得不通過(guò)犧牲功能來(lái)實(shí)現(xiàn)其平臺(tái)無(wú)關(guān)性,也就是說(shuō),AWT所提供的圖形功能是各種通用型操作系統(tǒng)所提供的圖形功能的交集。由于AWT是依靠本地方法來(lái)實(shí)現(xiàn)其功能的,我們通常把AWT控件稱(chēng)為重量級(jí)控件。
Swing是在AWT的基礎(chǔ)上構(gòu)建的一套新的圖形界面系統(tǒng),它提供了AWT所能夠提供的所有功能,并且用純粹的Java代碼對(duì)AWT的功能進(jìn)行了大幅度的擴(kuò)充。例如說(shuō)并不是所有的操作系統(tǒng)都提供了對(duì)樹(shù)形控件的支持,Swing利用了AWT中所提供的基本作圖方法對(duì)樹(shù)形控件進(jìn)行模擬。由于Swing控件是用100%的Java代碼來(lái)實(shí)現(xiàn)的,因此在一個(gè)平臺(tái)上設(shè)計(jì)的樹(shù)形控件可以在其他平臺(tái)上使用。由于在Swing中沒(méi)有使用本地方法來(lái)實(shí)現(xiàn)圖形功能,我們通常把Swing控件稱(chēng)為輕量級(jí)控件。
AWT和Swing之間的基本區(qū)別:AWT是基于本地方法的C/C++程序,其運(yùn)行速度比較快;Swing是基于AWT的Java程序,其運(yùn)行速度比較慢。對(duì)于一個(gè)嵌入式應(yīng)用來(lái)說(shuō),目標(biāo)平臺(tái)的硬件資源往往非常有限,而應(yīng)用程序的運(yùn)行速度又是項(xiàng)目中至關(guān)重要的因素。在這種矛盾的情況下,簡(jiǎn)單而高效的AWT當(dāng)然成了嵌入式Java的第一選擇。而在普通的基于PC或者是工作站的標(biāo)準(zhǔn)Java應(yīng)用中,硬件資源對(duì)應(yīng)用程序所造成的限制往往不是項(xiàng)目中的關(guān)鍵因素,所以在標(biāo)準(zhǔn)版的Java中則提倡使用Swing,也就是通過(guò)犧牲速度來(lái)實(shí)現(xiàn)應(yīng)用程序的功能。
簡(jiǎn)要的講:
AWT是抽象窗口組件工具包,是java最早的用于編寫(xiě)圖形節(jié)目應(yīng)用程序的開(kāi)發(fā)包。
Swing是為了解決AWT存在的問(wèn)題而新開(kāi)發(fā)的包,它以AWT為基礎(chǔ)的。
三、Swing基本框架
上圖列舉了AWT和Swing的關(guān)系,也可以看出Swing是繼承自AWT的。本文主要利用Swing來(lái)設(shè)計(jì)圖形化界面程序。
四、圖形化設(shè)計(jì)步驟
圖形化界面程序大家都使用過(guò),一般使用一個(gè)程序過(guò)程是:打開(kāi)一個(gè)程序出現(xiàn)一個(gè)窗口或?qū)υ?huà)框,其中一般有菜單、工具欄、文本框、按鈕、單選框、復(fù)選框等控件(組件也就是控件),用戶(hù)錄入相關(guān)數(shù)據(jù),點(diǎn)按相關(guān)菜單、按鈕,程序?qū)?shù)據(jù)進(jìn)行相關(guān)處理,并將處理后的數(shù)據(jù)顯示或者保存起來(lái),最后關(guān)閉程序。
用java編程的相關(guān)設(shè)計(jì)步驟來(lái)分解上面的的程序運(yùn)行過(guò)程如下圖所示:
1、創(chuàng)建頂層容器
對(duì)應(yīng)于程序的初始顯現(xiàn)窗口,窗口中放入其它菜單、工具欄、文本框、按鈕等組件
頂層容器圖形化界面顯示的基礎(chǔ),其它所有的組件(控件)都是直接或間接顯示在頂層容器中的。在java中頂層容器有三種,分別是JFrame(框架窗口,即通常的窗口)、JDialog(對(duì)話(huà)框)、JApplet(用于設(shè)計(jì)嵌入在網(wǎng)頁(yè)中的java小程序)。
2、創(chuàng)建中間容器、組件
對(duì)應(yīng)于程序中出現(xiàn)的菜單、工具欄(中間容器)、文本框、按鈕、單選框、復(fù)選框等控件。
有很多Swing組件可以使用,見(jiàn)前面的SwingUI組件表。
3、將組件加入容器
在java中創(chuàng)建組件后,還需要將組件放入相應(yīng)的容器,才能在頂層容器,如窗口中顯示出組件。
4、設(shè)置容器內(nèi)組件的位置
組件添加到容器中,還必須設(shè)置好組件的顯示位置,一般有兩種方法來(lái)設(shè)置組建的顯示位置,一是按照與容器的相對(duì)距離(以像素為單位),精確固定控件的位置;二是用布局管理器來(lái)管理組件在容器內(nèi)的位置。
5、處理組件所產(chǎn)生的事件
即用戶(hù)執(zhí)行選擇菜單、單擊按鈕等操作時(shí),就要執(zhí)行相應(yīng)的命令,進(jìn)行相關(guān)的程序處理,這就需要設(shè)置組件的事件。
五、組件容器的使用
Java中組件容器包含頂層容器和中間容器。
在java中頂層容器有三種,分別是JFrame(框架窗口,即通常的窗口)、JDialog(對(duì)話(huà)框)、JApplet(用于設(shè)計(jì)嵌入在網(wǎng)頁(yè)中的java小程序),頂層容器是容納其它組件的基礎(chǔ),即設(shè)計(jì)圖形化程序必須要有頂層容器。
Java中間容器是可以包含其它相應(yīng)組件的容器,但是中間容器和組件一樣,不能單獨(dú)存在,必須依附于頂層容器。
常見(jiàn)的中間容器有:
•JPanel:最靈活、最常用的中間容器。
•JScrollPane:與JPanel類(lèi)似,但還可在大的組件或可擴(kuò)展組件周?chē)峁L動(dòng)條。
•JTabbedPane:包含多個(gè)組件,但一次只顯示一個(gè)組件。用戶(hù)可在組件之間方便地切換。
•JToolBar:按行或列排列一組組件(通常是按鈕)。
1、JFrame框架窗口的使用
以上是JFrame的常用方法即說(shuō)明,下面舉例說(shuō)明。
實(shí)例1:直接定義Jframe類(lèi)的對(duì)象創(chuàng)建一個(gè)窗口
// JFrameDemo1.java import javax.swing.*; //使用Swing類(lèi),必須引入Swing包 public class JFrameDemo1{ public staticvoid main( String args[]) { //定義一個(gè)窗體對(duì)象f,窗體名稱(chēng)為"一個(gè)簡(jiǎn)單窗口" Jframe f = new JFrame("一個(gè)簡(jiǎn)單窗口"); /*設(shè)置窗體左上角與顯示屏左上角的坐標(biāo), 離顯示屏上邊緣300像素,離顯示屏左邊緣300像素 */ f.setLocation(300, 300); //f.setLocationRelativeTo(null);本語(yǔ)句實(shí)現(xiàn)窗口居屏幕中央 f.setSize(300,200); //設(shè)置窗體的大小為300*200像素大小 f.setResizable(false); //設(shè)置窗體是否可以調(diào)整大小,參數(shù)為布爾值 //設(shè)置窗體可見(jiàn),沒(méi)有該語(yǔ)句,窗體將不可見(jiàn),此語(yǔ)句必須有,否則沒(méi)有界面就沒(méi)有如何意義了 f.setVisible( true); //用戶(hù)單擊窗口的關(guān)閉按鈕時(shí)程序執(zhí)行的操作 f.setDefaultCloseOperation(f.EXIT_ON_CLOSE); } }
程序運(yùn)行結(jié)果如下圖所示:
可以根據(jù)程序代碼的注釋?zhuān)来涡薷南鄳?yīng)的方法參數(shù)查看效果。
setDefaultCloseOperation(intoperation):設(shè)置用戶(hù)在此窗體上發(fā)起"close"時(shí)默認(rèn)執(zhí)行的操作。方法中的參數(shù)解釋如下:
l為“0”或DO_NOTHING_ON_CLOSE:
(在WindowConstants中定義):不執(zhí)行任何操作;要求程序在已注冊(cè)的WindowListener對(duì)象的windowClosing方法中處理該操作。
比如實(shí)例程序代碼中更改為f.setDefaultCloseOperation(f.DO_NOTHING_ON_CLOSE);或者f.setDefaultCloseOperation(0),然后查看效果,可以發(fā)現(xiàn)窗口無(wú)法關(guān)閉,下面是相同用法,不再解釋了。
l為“1”或HIDE_ON_CLOSE
調(diào)用任意已注冊(cè)的WindowListener對(duì)象后自動(dòng)隱藏該窗體。此時(shí)沒(méi)有關(guān)閉程序,只是將程序界面隱藏了。
可以打開(kāi)任務(wù)管理器,可以看到一個(gè)叫“java.exe”的進(jìn)程(如果調(diào)試運(yùn)行了多個(gè)java程序,則會(huì)看到多個(gè)“java.exe”的進(jìn)程),如果此時(shí)用EditPlus測(cè)試程序,會(huì)發(fā)現(xiàn)當(dāng)單擊窗口的關(guān)閉按鈕關(guān)閉窗口后,卻無(wú)法再次對(duì)程序進(jìn)行調(diào)試,因?yàn)槌绦蚓€(xiàn)程沒(méi)有關(guān)閉,在任務(wù)管理器中關(guān)閉java.exe(如果有多個(gè)“java.exe”的進(jìn)程,則先都關(guān)閉掉,再來(lái)測(cè)試該問(wèn)題)基礎(chǔ)后,EditPlus才可以重新編譯改程序。
l為“2”或DISPOSE_ON_CLOSE
調(diào)用任意已注冊(cè)WindowListener的對(duì)象后自動(dòng)隱藏并釋放該窗體。但繼續(xù)運(yùn)行應(yīng)用程序,釋放了窗體中占用的資源。
l為“3”EXIT_ON_CLOSE(在JFrame中定義):使用Systemexit方法退出應(yīng)用程序。僅在應(yīng)用程序中使用。結(jié)束了應(yīng)用程序。
默認(rèn)情況下,該值被設(shè)置為HIDE_ON_CLOSE。
當(dāng)注釋掉實(shí)例中的f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);語(yǔ)句時(shí),起到的效果和f.setDefaultCloseOperation(f.HIDE_ON_CLOSE);或者f.setDefaultCloseOperation(1);一樣。
實(shí)例2:創(chuàng)建類(lèi)繼承JFrame類(lèi)創(chuàng)建一個(gè)窗口
// JFrameDemo2.java importjavax.swing.*; //創(chuàng)建子類(lèi)MyFrame繼承父類(lèi)JFrame class MyFrameextends JFrame{ //定義構(gòu)造函數(shù),帶有四個(gè)參數(shù),用于設(shè)置窗口位置和大小 MyFrame(int x,int y,int h,int w){ super("一個(gè)簡(jiǎn)單窗口"); //重寫(xiě)父類(lèi)方法,為窗口定義標(biāo)題 /*以下的方法調(diào)用前面沒(méi)有添加對(duì)象名,也不可能添加,要?jiǎng)?chuàng)建的對(duì)象名稱(chēng)是什么都不知道,也就不可能添加。但是創(chuàng)建對(duì)象后,對(duì)象自動(dòng)獲取這些初始值。*/ setLocation(x,y); setSize(h,w); setResizable(false); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } } publicclass JFrameDemo2{ public static void main( String args[]) { //實(shí)例化類(lèi)對(duì)象,提示設(shè)置參數(shù) MyFrame f = new MyFrame(300,300,300,200); } }
上面的例子也可以不使用構(gòu)造函數(shù),可以和實(shí)例一方式一樣,代碼可以改為如下模式。
實(shí)例3:一個(gè)簡(jiǎn)單窗口
// JframeDemo3.java importjavax.swing.*; class MyFrameextends JFrame{ MyFrame(){ } } publicclass JframeDemo3{ public static void main( String args[]) { MyFrame f = new MyFrame(); f.setTitle("一個(gè)簡(jiǎn)單窗口"); f.setLocationRelativeTo(null); f.setSize(300,200); f.setResizable(false); f.setVisible( true); f.setDefaultCloseOperation(3); } }
總結(jié)
以上就是本文關(guān)于Java圖形化界面設(shè)計(jì)之容器(JFrame)詳解的全部?jī)?nèi)容。許多人說(shuō)Java圖形化設(shè)計(jì)不重要,用的人也不多,事實(shí)上也確實(shí)如此。不過(guò),既然它如此簡(jiǎn)單,而且看起來(lái)挺有趣的,抽時(shí)間學(xué)一下也無(wú)妨。
相關(guān)文章
java靜態(tài)工具類(lèi)注入service出現(xiàn)NullPointerException異常處理
如果我們要在我們自己封裝的Utils工具類(lèi)中或者非controller普通類(lèi)中使用@Autowired注解注入Service或者M(jìn)apper接口,直接注入是報(bào)錯(cuò)的,因Utils用了靜態(tài)方法,我們無(wú)法直接用非靜態(tài)接口的,遇到這問(wèn)題,我們要想法解決,下面小編就簡(jiǎn)單介紹解決辦法,需要的朋友可參考下2021-09-09Java?如何接收kernel傳過(guò)來(lái)的數(shù)組(推薦)
這篇文章主要介紹了Java?如何接收kernel傳過(guò)來(lái)的數(shù)組,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-08-08如何使用IDEA的groovy腳本文件生成帶JPA注解的實(shí)體類(lèi)(圖文詳解)
這篇文章主要介紹了如何使用IDEA的groovy腳本文件生成帶JPA注解的實(shí)體類(lèi),本文通過(guò)圖文并茂實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07SpringAop自定義切面注解、自定義過(guò)濾器及ThreadLocal詳解
這篇文章主要介紹了SpringAop自定義切面注解、自定義過(guò)濾器及ThreadLocal詳解,Aspect(切面)通常是一個(gè)類(lèi),里面可以定義切入點(diǎn)和通知(切面 = 切點(diǎn)+通知),execution()是最常用的切點(diǎn)函數(shù),需要的朋友可以參考下2024-01-01mybatis對(duì)象List<String> List<Integer>屬性映射方式
這篇文章主要介紹了mybatis對(duì)象List<String> List<Integer>屬性映射方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12利用Sharding-Jdbc組件實(shí)現(xiàn)分表
這篇文章主要為大家詳細(xì)介紹了利用Sharding-Jdbc組件實(shí)現(xiàn)分表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07深入了解Java核心類(lèi)庫(kù)--泛型類(lèi)
這篇文章主要為大家詳細(xì)介紹了java泛型類(lèi)定義與使用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能給你帶來(lái)幫助2021-07-07