天天看點

對Java 中Swing的小總結

最近把Swing裡的内容稍微看了一下,Swing裡的基本元素有:

1.容器

頂層容器

頂層容器常見的有兩種:

I.窗體(JFrame),它可以直接出現在系統桌面上,其它元件必須直接或間接借助頂層容器才能顯示出來。

II.對話框(JDialog),這個比較常見。

非頂層容器

非頂層容器既可以做容器,又可以做元件,如面闆(JPanel)。

一般說來不直接将普通元件直接添加到頂層容器中,雖然可以這麼做。而是把複雜的界面分割,将某些功能相近或位置靠近的元件放到一個非頂層容器中,這樣可以更好的操作界面,也增強了可維護性。

利用非頂層容器可以很友善的搭建界面,并且代碼清晰、難度較小。因為開發一個界面的一小部分還是比較簡單的,代碼也易于維護。

一般一個JPanel都是一個具有相同功能的子界面或一些相似元件的組合。這樣當遇到相似的開發時就可以直接重用,避免了重複開發。

(以下關于嵌闆部分是從網上得到的,沒有試過它的用法,感覺應該挺重要的)

Swing中所有的元件都是放到容器中,主要的容器包括:JFrame,JPanel,JWindow,JDialog,JPanle。 JFrame是java的主架構,幾乎所有的Java應用程式界面都是在主架構之中設計的。有些容器并非一層,而由幾層嵌闆組成,如:拆分嵌闆 (JSplitPane),内容嵌闆, 頁簽式嵌闆(TabbedPane)等。

  拆分嵌闆:按指定的方向和方式拆分其内的兩個子元件,記住一個拆分嵌闆隻能拆分兩個子元件,如果想要拆分三個,大家自己先想一想辦法。本節最後給出了答案。

  内容嵌闆: JFrame,Jwindow,Jdialog就是上面提到的有多層嵌闆的容器,如果要在這些容器上面放置元件,必須放置在他們的内容嵌闆(pane)上。我們通過函數getContentPane()可得到目前容器的内容嵌闆。

  頁簽式嵌闆:這個嵌闆如同卡片,在上面提供檔案夾式的頁簽,目前隻顯示一頁,如要進入下一頁,隻要點選上面的頁簽。

  有些如JPanel是可以直接放置元件的容器。是以不需要使用嵌闆。

2.普通元件

普通元件就是具有一定功能、但不擔當容器的元件。

這類元件非常多,如标簽(JLabel)、按鈕(JButton)、文本框(JTextField)、文本域(JTextArea)等。

普通元件都有一些通用的方法,比較說setSize(),setBounds(),setVisible()等等。

Java Swing中處理各元件事件的一般步驟是: 

1.  建立一個元件(如JButton)。 

2.  将該元件添加到相應的面闆(如JPanel)。 

3.  注冊監聽器以監聽事件源産生的事件(如通過ActionListener來響應使用者點選按鈕)。 

4.  定義處理事件的方法(如在ActionListener中的actionPerformed中定義相應方法)。 

以上步驟我們可以用多種方法實作。但人們通常用兩種方法。第一種方法是隻利用一個監聽器以及多個if語句來決定是哪個元件産生的事件;第二種方法是使用多個内部類來響應不同元件産生的各種事件,其具體實作又分兩種方式,一種是匿名内部類,一種是一般内部類。 

利用一個監聽器來處理事件的缺點是,當程式比較複雜時,需要一大串的if 語句來實作,程式代碼較難閱讀與維護。當然,如果處理的事件較少,這種方式比較簡單。 

而使用匿名内部類同樣存在許多另外的問題。首先,根據元件在代碼中被定義的不同位置,類的定義以及處理事件的代碼将分散在程式的各個部分,不是集中在一塊,同樣不便于閱讀與維護。各事件的處理全部由嵌套的程式塊組成,視覺上很難定位程式代碼。如果事件處理程式比較複雜,内部類中的代碼将變得很長,你将找不到相應的元件定義位置。最後,當工具欄、菜單欄目等需要處理同樣的使用者行為時,該方法将使代碼更難維護。

一般開發的時候,有一段代碼是最常用的到的:

this.setTitle(String title);//設定标題

this.setBounds(int x,int y,int width,int height);//設定窗體的位置

this.setVisible(true);//設定窗體可見

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設定窗體關閉按鈕的作用

多做一些就能把這個給記住了...

有關布局管理器方面的總結:

1.布局管理器會控制嵌套在其他元件中元件的大小和位置。

2.當某個元件加到背景元件上面時,被加入的元件是由背景元件的布局管理器管理的。

3.布局管理器在做決定之前會詢問元件理想大小,并根據政策來決定采用哪些資料。

4.BorderLayout布局可以讓你把元件加到五個區域上。你必須以下列語句來指定區域。

   add(BorderLayout.EAST,pannel);

5.BorderLayout布局上的南北區域使用元件了解高度而不管寬度,東西區域剛好相反,中間區域隻能使用剩下的空間。

6.pack()方法會使window的大小符合内含元件的大小。

7.FlowLayout布局會有左至右、由上至下依加入的順序來安置元件,若寬度超過時就會換行。

8.FlowLayout布局會使元件在長寬上都使用理想的尺寸大小。

9.BoxLayout布局讓你可以垂直的排列元件,如同FlowLayout布局一樣,它會讓元件在長度上都使用理想的尺寸大小。

10.架構預設使用BoxLayout布局,面闆預設使用FlowLayout布局。

11.可以使用setLayout()來改變面闆布局管理器。

繼續閱讀