近把Swing里的內(nèi)容稍微看了一下,Swing里的基本元素有:
1.容器
頂層容器
頂層容器常見的有兩種:
I.窗體(JFrame),它可以直接出現(xiàn)在系統(tǒng)桌面上,其它組件必須直接或間接借助頂層容器才能顯示出來。
II.對話框(JDialog),這個(gè)比較常見。
非頂層容器
非頂層容器既可以做容器,又可以做組件,如面板(JPanel)。
一般說來不直接將普通組件直接添加到頂層容器中,雖然可以這么做。而是把復(fù)雜的界面分割,將某些功能相近或位置靠近的組件放到一個(gè)非頂層容器中,這樣可以更好的操作界面,也增強(qiáng)了可維護(hù)性。
利用非頂層容器可以很方便的搭建界面,并且代碼清晰、難度較小。因?yàn)殚_發(fā)一個(gè)界面的一小部分還是比較簡單的,代碼也易于維護(hù)。
一般一個(gè)JPanel都是一個(gè)具有相同功能的子界面或一些相似組件的組合。這樣當(dāng)遇到相似的開發(fā)時(shí)就可以直接重用,避免了重復(fù)開發(fā)。
(以下關(guān)于嵌板部分是從網(wǎng)上得到的,沒有試過它的用法,感覺應(yīng)該挺重要的)
Swing中所有的組件都是放到容器中,主要的容器包括:JFrame,JPanel,JWindow,JDialog,JPanle。 JFrame是java的主框架,幾乎所有的Java應(yīng)用程序界面都是在主框架之中設(shè)計(jì)的。有些容器并非一層,而由幾層嵌板組成,如:拆分嵌板 (JSplitPane),內(nèi)容嵌板, 頁簽式嵌板(TabbedPane)等。
拆分嵌板:按指定的方向和方式拆分其內(nèi)的兩個(gè)子組件,記住一個(gè)拆分嵌板只能拆分兩個(gè)子組件,如果想要拆分三個(gè),大家自己先想一想辦法。本節(jié)后給出了答案。
內(nèi)容嵌板: JFrame,Jwindow,Jdialog就是上面提到的有多層嵌板的容器,如果要在這些容器上面放置組件,必須放置在他們的內(nèi)容嵌板(pane)上。我們通過函數(shù)getContentPane()可得到當(dāng)前容器的內(nèi)容嵌板。
頁簽式嵌板:這個(gè)嵌板如同卡片,在上面提供文件夾式的頁簽,當(dāng)前只顯示一頁,如要進(jìn)入下一頁,只要點(diǎn)擊上面的頁簽。
有些如JPanel是可以直接放置組件的容器。所以不需要使用嵌板。
2.普通組件
普通組件就是具有一定功能、但不擔(dān)當(dāng)容器的組件。
這類組件非常多,如標(biāo)簽(JLabel)、按鈕(JButton)、文本框(JTextField)、文本域(JTextArea)等。
普通組件都有一些通用的方法,比較說setSize(),setBounds(),setVisible()等等。
Java Swing中處理各組件事件的一般步驟是:
1.新建一個(gè)組件(如JButton)。
2.將該組件添加到相應(yīng)的面板(如JPanel)。
3.注冊以事件源產(chǎn)生的事件(如通過ActionListener來響應(yīng)用戶點(diǎn)擊按鈕)。
4.定義處理事件的方法(如在ActionListener中的actionPerformed中定義相應(yīng)方法)。
以上步驟我們可以用多種方法實(shí)現(xiàn)。但人們通常用兩種方法。種方法是只利用一個(gè)以及多個(gè)if語句來決定是哪個(gè)組件產(chǎn)生的事件;第二種方法是使用多個(gè)內(nèi)部類來響應(yīng)不同組件產(chǎn)生的各種事件,其具體實(shí)現(xiàn)又分兩種方式,一種是匿名內(nèi)部類,一種是一般內(nèi)部類。
利用一個(gè)來處理事件的缺點(diǎn)是,當(dāng)程序比較復(fù)雜時(shí),需要一大串的if 語句來實(shí)現(xiàn),程序代碼較難閱讀與維護(hù)。當(dāng)然,如果處理的事件較少,這種方式比較簡單。
而使用匿名內(nèi)部類同樣存在許多另外的問題。首先,根據(jù)組件在代碼中被定義的不同位置,類的定義以及處理事件的代碼將分散在程序的各個(gè)部分,不是集中在一塊,同樣不便于閱讀與維護(hù)。各事件的處理全部由嵌套的程序塊組成,視覺上很難定位程序代碼。如果事件處理程序比較復(fù)雜,內(nèi)部類中的代碼將變得很長,你將找不到相應(yīng)的組件定義位置。后,當(dāng)工具欄、菜單欄目等需要處理同樣的用戶行為時(shí),該方法將使代碼更難維護(hù)。
一般開發(fā)的時(shí)候,有一段代碼是常用的到的:
this.set[title](String [title]);//設(shè)置標(biāo)題
this.setBounds(int x,int y,int width,int height);//設(shè)置窗體的位置
this.setVisible(true);//設(shè)置窗體可見
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設(shè)置窗體關(guān)閉按鈕的作用
多做一些就能把這個(gè)給記住了...
PS:總結(jié)的有點(diǎn)堆零零碎碎,有些是從網(wǎng)上找來的資料,不過基本概括了近學(xué)的Swing的基本內(nèi)容,可能非常淺顯,另從網(wǎng)上看到了一些材料,才發(fā)現(xiàn)自己對Swing的理解還很不夠,Swing創(chuàng)造性的采用了MVC(Model View Controller) 模式,理解這種模式才能對Swing有一個(gè)比較深入的領(lǐng)悟,正是由于這個(gè)機(jī)制,才使得Swing并不像表面看起來的那么差勁,Swing其實(shí)很強(qiáng)大!但是要理解這個(gè)MVC,要加以靈活運(yùn)用,目前為止,自己的水平遠(yuǎn)遠(yuǎn)不能達(dá)到,而且暫時(shí)也沒有時(shí)間去整理了,準(zhǔn)備在Java其它部分的知識先有個(gè)大概的了解之后,再進(jìn)行進(jìn)一步的研究吧,下面提供了關(guān)于Swing資料的下載,是我從網(wǎng)上整理了,對Swing的MVC框架的理解應(yīng)該有很大的幫助~~