版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第十一章圖形界面設(shè)計11.1Java圖形界面設(shè)計簡介11.2AWT概述11.3Swing概述11.4JFrame窗口11.5常用窗口組件11.6布局管理本章小結(jié)
11.1Java圖形界面設(shè)計簡介
圖形用戶界面(GraphicsUserInterface,GUI)設(shè)計,主要是指使用各種窗口界面組件進(jìn)行窗口程序設(shè)計,將程序中的數(shù)據(jù)以窗口的方式呈現(xiàn)給用戶,同時用戶也可以使用鍵盤、鼠標(biāo)等設(shè)備通過窗口的組件與程序進(jìn)行交互,如輸入數(shù)據(jù)、點擊按鈕、選擇菜單等。
圖形界面的設(shè)計使得程序與用戶之間具有更強的交互性,相對于以前在命令窗口下使用各種命令進(jìn)行交互具有很大的優(yōu)勢,也是目前桌面程序的主流方式。例如電腦上常用的記事本、Office、IDE等,都是使用圖形界面設(shè)計方式開發(fā)的桌面窗口程序軟件。再如Windows操作系統(tǒng)下的計算器就是一個典型的窗口程序,它有窗口的各種組件(窗口標(biāo)題、窗口按鈕、菜單及菜單選項、計算按鈕等等),可以通過鍵盤輸入、鼠標(biāo)點擊的方式方便地在該窗口界面下完成計算功能,如圖11-1所示。
圖11-1計算器桌面程序
計算器這個桌面程序是怎么設(shè)計和開發(fā)出來的呢?這主要涉及以下三個問題:
(1)窗口使用哪些窗口組件及組件屬性如何設(shè)置?
(2)這些組件在窗口中是怎么布局的?
(3)窗口組件如何響應(yīng)各種事件(如鍵盤輸入、鼠標(biāo)點擊等)?
本章主要涉及前兩個問題,即窗口組件以及組件在窗口中的布局;最后一章將涉及第三個問題,即如何讓這些窗口組件能夠響應(yīng)各種事件動作。
Java語言提供了兩個用以完成GUI程序設(shè)計的包,即java.awt包和javax.swing包,這些包提供的相關(guān)類能夠幫助程序員完成窗口編程。
11.2AWT概述
java.awt包中的相關(guān)類能夠完成窗口的界面設(shè)計,包括窗口組件、組件布局、事件處理等等。該包下主要包含兩個基類,即Component(組件)和MenuComponent(菜單組件),而除了這兩個基類及其子類之外,還有一些窗口輔助類(如字體、顏色和事件等)。
(1)?Component類層次結(jié)構(gòu)如圖11-2所示。圖11-2AWT下的Component類層次結(jié)構(gòu)
Component組件類是構(gòu)成窗口的圖形界面元素,也稱為窗口組件類,使用這些類能夠構(gòu)建出窗口界面,主要如下:
①Container:容器類(具有各種容器子類);
②Button:按鈕類(具有各種按鈕子類);
③Checkbox:復(fù)選框;
④List:文本列表;
⑤Label:標(biāo)簽;
⑥TextComponent:文本編輯組件(TextField、Password、TextArea等)。
(2)?MenuComponent類層次結(jié)構(gòu)如圖11-3所示。圖11-3AWT下的MenuComponent類層次結(jié)構(gòu)
抽象類MenuComponent是所有與菜單相關(guān)的組件的超類,其下的兩個類MenuBar菜單欄和MenuItem菜單選項,用于構(gòu)建窗口的菜單。
上述(1)、(2)這些AWT下的窗口組件類,在Swing包中基本都有對應(yīng)的組件類?,F(xiàn)在的窗口編程基本不再使用java.awt包中的這些組件類,而使用javax.swing包中對應(yīng)的組件,如AWT中的Button、Checkbox、List、Label、MenuBar、MenuItem等類,在Swing包中對應(yīng)的是JButton、JCheckbox、JList、JLabel、JMenuBar、JMenuItem等。
(3)?AWT包中還有一些其它的輔助類,如圖11-4所示。圖11-4AWT下的其它輔助類
在使用Java進(jìn)行窗口界面設(shè)計時,窗口組件主要使用javax.swing包中的類,但是對于java.awt包中這些輔助類,在Swing中并沒有新的類替代,因此還需要使用它們,主要如下:
①Layout:各種布局管理器類(如FlowLayout、BorderLayout等);
②Font:字體類;
③Color:顏色類;
④Image :圖形圖像類的超類;
⑤Event:事件類;
⑥Graphics:繪圖類。
11.3Swing概述
Swing提供許多比AWT更好的窗口界面組件,這些組件是用Java實現(xiàn)的輕量級(light-weight)組件,沒有本地代碼,不依賴操作系統(tǒng)的支持,這也是它與AWT組件的最大區(qū)別。Swing在不同的平臺上表現(xiàn)一致,并且有能力提供本地窗口系統(tǒng)不支持的其它特性。Swing組件采用了MVC的設(shè)計模式(Model-View-Control),設(shè)計更合理,功能更強大。
Swing的常用組件主要分為以下幾類:
(1)容器類:能夠容納其它窗口組件的組件。
①頂級容器:JFrame、JDialog、JApplet、JWindow。
②中間容器:JPanel、JScrollPane、JToolBar、JSplitPane。
(2)基本組件。
①按鈕組件:JButton、JRadioButton、JCheckBox。
②標(biāo)簽組件:JLabel。
③文本組件:JTextField、JPasswordField、JTextArea。
④列表組件:JComboBox、JList。
⑤菜單組件:JMenuBar、JMenu、JMenuItem、JToolBar。
(3)復(fù)雜組件。
①文件選擇:JFileChooser。
②顏色選擇:JColorChooser。
③樹形組件:JTree。
④表格組件:JTable。
以上也只是列出了Swing的一部分較常用的組件類,前面說過Swing只是在窗口組件方面提供了更加強大、豐富的GUI組件,并不能完全替代AWT。從命名上可以看出,Swing組件和對應(yīng)的AWT組件只是差了一個首字母J,但也有幾個命名例外,如:
JComboBox:下拉列表組件,對應(yīng)AWT中的Choice組件。
JFileChooser:文件選擇器組件,對應(yīng)AWT中的FileDialog組件。
Swing頂級容器類層次結(jié)構(gòu)如圖11-5所示。圖11-5Swing頂級容器類層次結(jié)構(gòu)
Swing中間容器以及組件類層次結(jié)構(gòu)(部分)如圖11-6所示。圖11-6Swing中間容器以及組件類層次結(jié)構(gòu)
11.4JFrame窗口JFrame稱為窗口框架,是帶標(biāo)題欄并且可以改變大小的窗口,一般使用它來構(gòu)建桌面應(yīng)用程序的窗口。JFrame類繼承自java.awt.Frame類,其對象作為獨立可運行的主窗口,通常用于開發(fā)桌面應(yīng)用程序,通過JFrame對象的方法可以設(shè)置主窗口的菜單欄、工具欄、狀態(tài)欄、窗口大小、窗口圖標(biāo)、窗口的各種屬性以及在主窗口中添加其它窗口組件等。JFrame默認(rèn)的布局管理器是BorderLayout,通過setLayout方法可改變默認(rèn)的布局管理器,而添加到主窗口的組件的位置和大小可以由布局管理器決定。
程序結(jié)果:
(2)在設(shè)置位置和大小的時候,使用的單位是像素,屏幕左上角的XY坐標(biāo)為(0,0),從左向右X坐標(biāo)增加,從上向下Y坐標(biāo)增加,如圖11-7所示。圖11-7窗口大小與位置
(3)?setLayout用于設(shè)置窗口的布局管理器,該函數(shù)的參數(shù)為布局管理器對象,用以對窗口容器進(jìn)行布局,現(xiàn)在暫時不用布局管理器,故設(shè)置為空null。
(4)“setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);”用于設(shè)置何時進(jìn)行關(guān)閉窗口(點擊窗口右上角的關(guān)閉按鈕)的操作。望文生義,JFrame.EXIT_ON_CLOSE是在關(guān)閉窗口時退出程序,EXIT_ON_CLOSE是JFrame的字段。
(5)程序運行到“fr.setVisible(true);”語句時,窗口就在屏幕上顯示出來。
上面程序是在main函數(shù)中直接產(chǎn)生一個JFrame的對象,然后對該對象進(jìn)行設(shè)置,最后顯示出窗口,還可以使用繼承的結(jié)構(gòu)方式來生成窗口。
JFrame其它的一些常用方法如表11-1所示。
JFrame關(guān)閉窗口的字段如表11-2所示。
11.5常用窗口組件
11.5.1標(biāo)簽在窗口中需要顯示文字或者圖像圖片時,首先使用JLabel(javax.swing.JLabel)標(biāo)簽對象來承載文字和圖像,然后將JLabel標(biāo)簽添加到窗口容器中。
1.JLabel的構(gòu)造函數(shù)
可以通過不同的構(gòu)造函數(shù)來讓JLabel承載文本和圖像,JLabel的構(gòu)造函數(shù)如表11-3所示。
2.JLabel的常用方法
JLable的常用方法如表11-4所示。
程序結(jié)果:
11.5.2字體、顏色與圖像
1.字體(java.awt.Font)
要對窗口組件的文字設(shè)置字體,可以使用java.awt.Font類,一般需要兩個步驟:
(1)創(chuàng)建字體對象:
Fontfont=newFont("字體名",字體樣式,字體大小);
(2)讓字體對象與組件進(jìn)行“綁定”:
組件對象.setFont(font);
首先,生成字體對象,上述Font構(gòu)造函數(shù)需要三個參數(shù):
①字體名:字體名和計算機系統(tǒng)中的字體文件相對應(yīng),字體文件一般存放在C盤的Windows目錄的font目錄中。
②字體樣式:使用Font字段的方式來表示,即Font.PLAIN(普通樣式)、Font.BOLD(字體加粗)、Font.ITALIC(傾斜)等。
③字體大小:使用字體磅值來表示。
其次,對于能夠承載文字的組件使用setFont方法,將Font對象傳入該方法即可根據(jù)字體對象的設(shè)置改變組件上的文字字體:
組件對象.setFont(字體對象);
2.顏色(java.awt.Color)
對組件顏色的設(shè)置主要使用java.awt.Color類,在程序中顏色的表示主要有兩種方式:
(1)直接使用Color類調(diào)用其靜態(tài)成員字段來表示某種顏色,例如Color.Red(紅色)、Color.Blue(藍(lán)色)、Color.DARK_GRAY(深灰)、Color.LightGray(淺灰),具體Color類還有哪些預(yù)定義的顏色,可以查詢JDK幫助文檔,這里不再贅述。
(2)定義一個Color對象,對該對象的顏色屬性進(jìn)行設(shè)置。Color類用得比較多的是具有三個int參數(shù)的構(gòu)造函數(shù),這三個int參數(shù)取值為0~255,表示RGB顏色數(shù)值,即紅、綠、藍(lán),可根據(jù)這三種顏色數(shù)值的變化來表示各種顏色。例如newColor(0,0,0)表示黑色,newColor(255,255,255)表示白色,newColor(255,0,0)表示紅色,newColor(255,255,0)表示黃色,newColor(128,42,42)表示棕色等。
3.圖像圖標(biāo)(javax.swing.ImageIcon)
如果要將磁盤上的圖像文件顯示到窗口中,可以使用javax.swing.ImageIcon圖像圖標(biāo)類生成對象,然后將該對象設(shè)置到JLabel中,再將JLabel對象加入到窗口中,具體分為下面幾個步驟:
(1)根據(jù)磁盤圖像文件名生成圖像圖標(biāo)類對象:
ImageIconimageIcon=newImageIcon("star.png");
(2)將圖像圖標(biāo)對象設(shè)置到JLabel對象中:
JLabellabel1=newJLabel(imageIcon); //使用構(gòu)造函數(shù)方式
label1.setIcon(imageIcon); //使用set方法
(3)將上述設(shè)置好的JLabel對象添加到窗口中。
4.圖像(java.awt.Image)
在java.awt下還有一個Image抽象類,它是表示圖形圖像所有類的超類。生成Image對象時需要借助于Toolkit類對象的getImage方法,而生成Toolkit對象有兩種方法,一是借助于Component類的getToolkit()方法;二是借助于Toolkit的靜態(tài)方法getDefaultToolkit()。所以生成Image對象的程序語句為
Imageimage=getToolkit().getImage("a.png");
和
Imageimage=newToolkit.getDefaultToolkit().getImage("a.png");
11.5.3面板
JPanel(javax.swing.JPanel)稱為面板,是一種沒有標(biāo)題欄、邊框的中間層容器,可以理解為一層透明的“紙”。將組件或其它面板先加入到JPanel中,然后再將JPanel放置到頂級容器JFrame或者其它容器中,這樣可以完成較為復(fù)雜的窗口界面設(shè)計,其主要方法如表11-5所示。
程序結(jié)果:
11.5.4按鈕
1.命令按鈕
JButton(javax.swing.JButton)命令按鈕是用戶進(jìn)行交互最為常用的組件之一,用戶可以使用鼠標(biāo)點擊來完成交互動作。與JLabel組件類似,可以對JButton按鈕對象進(jìn)行各種設(shè)置,并加入到容器中。下面是對按鈕進(jìn)行設(shè)置的部分方法:
①setText:設(shè)置文本。
②setIcon:設(shè)置按鈕圖像。
③setBackground:設(shè)置背景色。
④setForeground:設(shè)置前景色(如:按鈕上文本的顏色)。
⑤setBounds:設(shè)置按鈕的位置與大小。
⑥setFont:設(shè)置按鈕上文本的字體。
⑦setPressedIcon:設(shè)置按鈕按下時的圖標(biāo)。
⑧setRolloverIcon:設(shè)置鼠標(biāo)經(jīng)過按鈕時的圖標(biāo)。
⑨setHorizontalAlignment:設(shè)置水平對齊方式。
⑩setVerticalAlignment :設(shè)置垂直對齊方式。
另外,get方法可用來獲取按鈕信息:
①getText:獲取按鈕上的文本。
②getIcon:獲取按鈕上的圖像圖標(biāo)。
③getPressedIcon:獲取按鈕按下時的圖標(biāo)。
④getRolloverIcon :獲取鼠標(biāo)經(jīng)過按鈕時的圖標(biāo)。
程序結(jié)果:
2.復(fù)選框和單選按鈕
復(fù)選框(多選按鈕)和單選按鈕用于讓用戶選取指定的項目,通過鼠標(biāo)單擊操作可設(shè)置組件的狀態(tài)是“選中”還是“未選中”。
(1)復(fù)選框(javax.swing.JCheckBox):可以單獨使用,表示多個項目是否被選擇,如多項選擇題的多選答案。
(2)單選按鈕(javax.swing.JRadioButton):一般需要配合javax.swing.ButtonGroup類來使用,將多個單選按鈕放在一個按鈕組里,從而實現(xiàn)多個單選項只能選擇一個,如選擇題中的四選一答案。
程序結(jié)果
11.5.5文本組件
在圖形界面中,文本框是用戶輸入文本信息的組件。在Swing組件中,文本框包括以下三類:
(1)單行文本框(javax.swing.JTextField):只能輸入單行文本字符串。
(2)多行文本框(javax.swing.JTextArea):可以輸入多行文本字符串。
(3)密碼框(javax.swing.JPasswordField):可輸入單行文本,輸入的字符串會被其它字符屏蔽(如*)。
程序結(jié)果:
JTextField、JTextArea兩個類都繼承自javax.swing.text.JTextComponent類,而JPasswordField類繼承自JTextField類,它們的常用方法如表11-6、表11-7所示。
11.5.6下拉列表
JComboBox(javax.swing.JComboBox)類是Swing中的下拉菜單組件,使用它能選中其下拉列表中的一個項目Item,它的各個選項的選擇是互斥的,比單選按鈕節(jié)省空間。可以使用addItem方法來添加選項,或者使用insertItemAt在指定位置插入選項。如果使用該類對象的setEditable方法設(shè)置為true,則下拉菜單的選項文本就可以編輯,這種組件也被稱為組合框。
程序結(jié)果:
11.5.7菜單
窗口程序一般都會有菜單工具為用戶的操作提供導(dǎo)航,方便用戶利用菜單提供的選項來完成相應(yīng)的功能。菜單主要分為兩類,即窗口菜單和彈出菜單。下面將介紹一般的窗口菜單。
Java語言中的菜單組件主要由菜單欄(javax.swing.JMenuBar)、菜單(javax.swing.JMenu)和菜單項(javax.swing.JMenuItem)三部分組成。窗口具有一個菜單欄JMenuBar,菜單欄具有多個菜單JMenu,每個菜單可以有多個菜單項JMenuItem。
程序結(jié)果:
11.6布局管理
Java中的布局管理主要有兩種:(1)絕對布局:不需要布局管理器,直接對每個組件設(shè)置位置和大小,然后將組件加入到相應(yīng)的容器中。(2)布局管理器(Layout):采用Java定義好的布局管理器類來對容器中組件進(jìn)行布局管理,主要有流式布局管理器(FlowLayout)、邊界布局管理器(BorderLayout)、網(wǎng)格布局管理器(GridLayout)、網(wǎng)格包布局管理器(GridbagLayout)和盒子布局管理器(BoxLayout)等。
11.6.1絕對布局
絕對布局是指容器中的所有組件的大小和位置都是相對容器的X、Y坐標(biāo)進(jìn)行設(shè)置,也就是說每個組件都要設(shè)置大小、位置,而當(dāng)窗口被拉伸時,這些組件的大小和位置不會變化。絕對布局方式適合于較小的窗口界面,并且窗口大小一般設(shè)置為不可改變,比如一個小的登錄界面等,但其缺點也是比較明顯的:
(1)每個組件都需要進(jìn)行大小和位置的設(shè)置,編程量較大,效率低,容易出錯。
(2)隨著窗口的拉伸,窗口中組件的位置不隨著變化。
對容器進(jìn)行絕對布局的主要思路是:
(1)將容器的布局管理器設(shè)置為空:
容器.setLayout(null);
(2)對于每個組件設(shè)置大小和位置:
組件.setBounds(x,y,width,height);
其中,x、y為組件左上角在容器中的坐標(biāo),width、height為組件的寬和高。
程序結(jié)果:
11.6.2流式布局管理器
如果使用絕對布局的方式來設(shè)置窗口組件的布局,當(dāng)組件比較多、布局比較復(fù)雜時,編程會比較麻煩,也很難維護(hù),經(jīng)常會出現(xiàn)一個組件位置或大小的變化影響到整個布局且很難調(diào)整的情況。為了使生成的圖形用戶界面具有平臺無關(guān)性,Java使用布局管理器類來管理組件在容器中的布局,目的是在相應(yīng)的布局規(guī)則下減少程序員的編程量,不需要對每個組件設(shè)置大小和位置,易于維護(hù)。
1.FlowLayout(java.awt.FlowLayout)類的布局描述
(1)某個java容器使用流式布局管理器,表示向容器中加入的組件將從左向右、從上到下自動排列,碰到容器邊界就轉(zhuǎn)到下一行繼續(xù)排列。
(2)組件不需要設(shè)置大小,組件的大小由組件本身決定,例如JLabel、JButton組件承載的文字多少和圖像大小決定其組件大小。
(3)當(dāng)容器被拉伸時,容器中的組件按照FlowLayout的布局規(guī)則自動調(diào)整位置。
(4)使用FlowLayout作為默認(rèn)布局管理器的容器為JPanel和JApplet兩個中間容器。
2.FlowLayout方法說明
該類的常用方法如表11-8所示。
3.FlowLayout的對齊屬性
(1)?0或FlowLayout.LEFT:控件左對齊。
(2)?1或FlowLayout.CENTER:居中對齊。
(3)?2或FlowLayout.RIGHT:右對齊。
(4)?3或FlowLayout.LEADING:控件與容器方向開始邊對應(yīng)。
(5)?4或FlowLayout.TRAILING:控件與容器方向結(jié)束邊對應(yīng)。
(6)如果是01234之外的整數(shù):左對齊。
4.FlowLayout的應(yīng)用
程序結(jié)果
對該窗口進(jìn)行拉伸可以看到下面情況:
11.6.3邊界布局管理器
1.BorderLayout(java.awt.BorderLayout)布局描述
(1)使用BorderLayout作為默認(rèn)布局管理器的容器是頂級容器JFrame和JDialog。
(2)某個容器使用邊界布局管理器時,邊界布局管理器把容器內(nèi)部分為五個位置,即上北(NORTH)、下南(SOUTH)、左西(WEST)、右東(EAST)、中(CENTER),如圖11-8所示。
圖11-8邊界布局的五個位置
(3)該容器最多只能加入五個組件(或容器),缺省位置為CENTER,當(dāng)組件(或容器)加入到某個位置時會自動被拉伸充滿該位置。如果多個組件加入同一個區(qū)域,就會產(chǎn)生覆蓋效果,在該區(qū)域只能看到最后一個加入的組件。
(4)一般情況下是頂級容器如JFrame使用BorderLayout,然后將面板加入到這些區(qū)域,再將組件加入到面板中。
2.BorderLayout方法說明
BorderLayout的常用方法如表11-9所示。
3.BorderLayout的靜態(tài)屬性
(1)?BorderLayout.CENTER:容器中央。
(2)?BorderLayout.WEST:容器左邊。
(3)?BorderLayout.EAST:容器右邊。
(4)?BorderLayout.NORTH:容器頂部。
(5)?BorderLayout.SOUTH:容器底部。
(6)?BorderLayout.LINE_START:行方向的開始處。
(7)?BorderLayout.LINE_END:行方向的結(jié)尾處。
(8)?BorderLayout.PAGE_START:第一行布局內(nèi)容之前。
(9)?BorderLayout.PAGE_END:最后一行布局內(nèi)容之后。
4.BorderLayout的使用
程序結(jié)果:
對該窗口進(jìn)行拉伸后可以看到下面情況:
上述程序是將五個按鈕放入五個區(qū)域,而實際編程中,可能只能放入2到3個組件。對于本程序中的以下五個語句,選擇其中幾個進(jìn)行組合,會得到下面的程序結(jié)果。
contentPane.add(BorderLayout.NORTH,buttons[0]);
contentPane.add(BorderLayout.WEST,buttons[1]);
contentPane.add(BorderLayout.CENTER,buttons[2]);
contentPane.add(BorderLayout.EAST,buttons[3]);
contentPane.add(BorderLayout.SOUTH,buttons[4]);
程序結(jié)果:
11.6.4網(wǎng)格布局管理器
1.GridLayout(java.awt.GridLayout)布局描述
(1)容器中的各組件呈M行?×?N列的網(wǎng)格狀分布。
(2)網(wǎng)格每列寬度相同,等于容器的寬度除以網(wǎng)格的列數(shù),網(wǎng)格每行高度相同,等于容器的高度除以網(wǎng)格的行數(shù)。
(3)各組件的排列方式為從上到下、從左到右,組件放入容器的順序決定了它在容器中的位置,如:第一個加入容器的組件放在第1行第1列網(wǎng)格,第二個加入的組件放在第1行第2列網(wǎng)格。
(4)容器大小改變時,組件的相對位置不變,大小跟著縮小或拉伸。
2.GridLayout構(gòu)造函數(shù)
GridLayout類的構(gòu)造函數(shù)如表11-10所示。
3.GridLayout常用方法
GridLayout的常用方法如表11-11所示。
4.?GridLayout的使用
程序結(jié)果:
11.6.5網(wǎng)格包布局管理器
1.GridbagLayout(java.awt.GridbagLayout)布局描述
(1)網(wǎng)格包布局是目前接觸到的最復(fù)雜和靈活的布局管理器,在網(wǎng)格布局的基礎(chǔ)上,對于加入容器中的組件的布局控制性更強,比如能讓組件跨越多個單元格,能讓組件在單元格中具有各種拉伸方式、對齊方式等等。
(2)每個GridBagLayout對象維持一個動態(tài)的矩形單元網(wǎng)格,每個組件占用一個或多個這樣的單元,稱為顯示區(qū)域;網(wǎng)格坐標(biāo)(0,0)位于容器的左上角網(wǎng)格,其中X向右遞增,Y向下遞增。
(3)容器使用GridbagLayout進(jìn)行布局,需要聯(lián)合GridBagConstraints網(wǎng)格包約束對象:首先生成網(wǎng)格包約束對象c,然后對c進(jìn)行布局屬性的設(shè)置,容器在加入某個組件之前,將組件和網(wǎng)格包約束對象進(jìn)行綁定:
網(wǎng)格包布局管理器對象.setConstraints(組件對象,網(wǎng)格包約束對象c);
這樣組件加入容器時就具有網(wǎng)格包約束對象設(shè)置的布局特性,即每個組件在容器中的布局是由網(wǎng)格包約束對象來規(guī)定的。
2.GridBagConstraints網(wǎng)格包約束對象描述
GridBagConstraints網(wǎng)格包約束對象的使用主要是設(shè)置其布局屬性,這些布局屬性對應(yīng)各種布局規(guī)則,然后將該對象與窗口組件“綁定”,這些布局規(guī)則就作用于要加入網(wǎng)格包布局容器的組件上,使之完成較為復(fù)雜和靈活的布局。其主要的屬性如下:
(1)?gridx和gridy:設(shè)置組件的位置(x和y坐標(biāo))。
①gridx設(shè)置為GridBagConstraints.RELATIVE,代表此組件位于之前所加入組件的右邊。
②gridy設(shè)置為GridBagConstraints.RELATIVE,代表此組件位于以前所加入組件的下面。
③建議定義出gridx、gridy的位置,表示放在幾行幾列,例如gridx=0,gridy=0時放在0行0列。
(2)?gridwidth和gridheight:設(shè)置組件所占寬度和高度。
①默認(rèn)值為1,gridwidth=2表示占2個網(wǎng)格的寬度,gridheight=2表示占2個網(wǎng)格的高度,也即組件跨越的單元格。
②可以使用GridBagConstraints.REMAINDER常量,代表此組件為此行或此列的最后一個組件,而且會占據(jù)所有剩余的空間。
(3)?weightx和weighty:拉伸比例。
①默認(rèn)值皆為0,表示組件大小固定,窗口被拉伸,但是組件大小不會變化。
②如果設(shè)置為非0,則窗口被拉伸變大時,各組件隨著比例變大;數(shù)字越大,表示組件能得到的空間更多。
(4)?insets:組件之間的間距。
①有四個參數(shù),分別是上、左、下、右,默認(rèn)值為(0,0,0,0)。
②對于網(wǎng)格包約束對象進(jìn)行insets的設(shè)置,需要Insets對象,例如:
c.insets=newInsets(10,0,0,0); //上部有10像素的間距
(5)?fill:組件在單元格中的填充情況。
①如果顯示區(qū)域比組件的區(qū)域大,可以用fill屬性來控制組件的填充行為。
②可以控制組件在單元格中進(jìn)行垂直填充、水平填充或者兩個方向一起填充。
③使用方式,例如:
(6)?anchor:組件??课恢?。
①當(dāng)組件小于其顯示區(qū)域時,用于確定將組件置于顯示區(qū)域(網(wǎng)格)的何處。
②c.anchor可以設(shè)置為下列屬性,以表示組件在網(wǎng)格中的??课恢茫?/p>
(7)?ipadx和ipady:組件內(nèi)部填充,默認(rèn)值為0。
3.?GridBagLayout和GridBagConstraints的使用
程序結(jié)果:
本章小結(jié)
1.Java圖形用戶界面設(shè)計主要使用java.awt和javax.swing兩個包下的類來完成。
2.窗口設(shè)計主要有以下幾個步驟:(1)使用JFrame類構(gòu)成窗口并設(shè)置窗口屬性。(2)創(chuàng)建javax.swing包下的各種窗口組件類對象,對組件進(jìn)行屬性設(shè)置后加入到容器/窗口中。(3)對容器中的組件進(jìn)行布局(絕對布局或布局管理)。(4)對各個窗口組件進(jìn)行事件處理,使之能響應(yīng)相應(yīng)的事件。
3.Java的窗口組件很多,本章主要介紹了窗口容器JFrame,面板容器JPanel,標(biāo)簽JLabel,命令按鈕JButton,復(fù)選框JCheckBox,單選按鈕JRadioButton,文本框JTextField,密碼框JPassword,文本區(qū)JArea,下拉列表JCombox,菜單JMenu、JMenuBar和JMenuItem等,以及一些輔助類,如字體Font、顏色Color、圖像Image和ImageIcon等,還有其它很多窗口組件需要讀者繼續(xù)挖掘?qū)W習(xí)。
4.JavaGUI容器的布局管理主要是分為絕對布局和布局管理器兩種方式。絕對布局需要對容器中的每一個組件設(shè)置好大小和位置;布局管理器是使用相應(yīng)布局類的規(guī)則自動管理容器的布局。
5.本章介紹了流式布局FlowLayout、邊界布局BorderLayout、網(wǎng)格布局GridLayout和網(wǎng)格包布局GridBagLayout等,配合JPanel的使用,Java初學(xué)者可以完成簡單到較為復(fù)雜的容器布局。
6.除了以上四個較為常用的布局管理器外,還有卡片布局(java.awt.CardLayout)、盒子布局(javax.swing.BoxLayout)、重疊布局(javax.swing.OverlayLayout)等,在此就不再進(jìn)行介紹,讀者可在課后自行學(xué)習(xí)。第十二章事件處理12.1事件基本概念12.2委托事件模型12.3事件處理程序本章小結(jié)
12.1事件基本概念
12.1.1事件窗口的事件(event)指的是用戶使用鼠標(biāo)、鍵盤在窗口程序中對窗口組件進(jìn)行的各種操作,例如鼠標(biāo)點擊、進(jìn)入、移動、拖動以及鍵盤鍵入等。事件也可以由操作系統(tǒng)觸發(fā),例如時間計時器等,事件類的主要類層次如圖12-1所示。
圖12-1事件類層次結(jié)構(gòu)
java.util.EventObject是所有事件類的超類,具有方法getSource(),用于返回產(chǎn)生某事件的組件對象(事件源);java.awt.AWTEvent是所有AWT事件的根事件類,此類及其子類取代了原來的java.awt.Event類,具有方法getID(),返回某事件的ID號。
Java的部分事件類描述如表12-1所示。
12.1.2事件源
事件源(EventSource)即事件發(fā)生的地方,主要指的是事件發(fā)生在哪個窗口組件上。上述的事件類大多與相應(yīng)的事件源對應(yīng),如表12-2所示。
12.1.3監(jiān)聽器接口與監(jiān)聽器對象
窗口組件的事件如何進(jìn)行處理呢?Java將窗口組件的事件處理“委托”給監(jiān)聽器對象來完成,監(jiān)聽器對象是監(jiān)聽器接口的實現(xiàn)類對象。
1.監(jiān)聽器接口
Java的接口java.util.EventListener是所有監(jiān)聽器接口的父接口,該父接口下約有70多個子接口,較為常用的接口如表12-3所示。
不同的監(jiān)聽器接口監(jiān)聽的事件源不同,監(jiān)聽的具體事件也不同;在監(jiān)聽器接口中聲明了被監(jiān)聽組件發(fā)生相應(yīng)事件時應(yīng)該被調(diào)用的事件處理方法,方法的具體代碼由監(jiān)聽器接口的實現(xiàn)類來完成。例如鍵盤監(jiān)聽器接口KeyListener將監(jiān)聽某個窗口組件的鍵盤事件,接口的定義如下:
鍵盤監(jiān)聽器接口KeyListener聲明了三個方法監(jiān)聽某個組件上對應(yīng)的事件,當(dāng)事件發(fā)生時將調(diào)用相應(yīng)的方法:
(1)鍵盤按鍵被按下,調(diào)用keyPressed方法。
(2)鍵盤按鍵抬起來,調(diào)用keyReleased方法。
(3)鍵盤按鍵被敲擊一次,調(diào)用keyTyped方法。
2.監(jiān)聽器對象
監(jiān)聽器對象是監(jiān)聽器接口實現(xiàn)類的實例對象,該對象具有監(jiān)聽窗口組件指定事件的能力,當(dāng)該事件在窗口組件上發(fā)生時,監(jiān)聽器對象能夠獲取該事件對象并執(zhí)行預(yù)定義的方法,用以實現(xiàn)事件處理。
對于不同組件可能發(fā)生的對應(yīng)事件,需要選擇相應(yīng)的監(jiān)聽器接口,自定義監(jiān)聽器類實現(xiàn)該接口,將事件發(fā)生時要執(zhí)行的動作代碼寫到接口聲明的方法中,然后創(chuàng)建監(jiān)聽器對象與被監(jiān)聽的組件進(jìn)行綁定,就可以“坐等”該組件上指定事件的發(fā)生。
12.1.4監(jiān)聽器適配器
監(jiān)聽器適配器(ListenerAdapter)是空實現(xiàn)了對應(yīng)監(jiān)聽器接口的類,即監(jiān)聽器適配器將監(jiān)聽器接口的所有方法進(jìn)行了實現(xiàn),但是方法體為空,這樣可方便程序員繼承監(jiān)聽器適配器而不用實現(xiàn)監(jiān)聽器接口,如圖12-2所示。
圖12-2監(jiān)聽器適配器
因為適配器已經(jīng)空實現(xiàn)了監(jiān)聽器的所有抽象方法,對于自定義監(jiān)聽器類而言,繼承了適配器也就相當(dāng)于空實現(xiàn)了監(jiān)聽器接口。對于接口中的多個抽象方法,需要在哪個方法中寫事件處理代碼,只需要重寫那個方法即可,其它不需要的方法可以不用管。常用監(jiān)聽器對應(yīng)的適配器如表12-4所示。
12.2委托事件模型
從前面對Java事件處理的基本概念的描述可知,窗口組件對事件的處理是“委托”給監(jiān)聽器對象來完成的,而事件處理要求Java程序員需要做的有以下幾步:(1)編寫自定義監(jiān)聽器類,可以實
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉儲物流能源管理規(guī)范
- 城市排水防澇設(shè)施建設(shè)標(biāo)準(zhǔn)
- 企事業(yè)單位車輛安全信息安全管理
- 廣告施工糾紛解決合同文本格式
- 保安巡邏新司機聘用合同
- 子公司合規(guī)與倫理指導(dǎo)
- 消防栓使用與維護(hù)指南
- 橋梁排水系統(tǒng)節(jié)能改造合同
- 企業(yè)級管理秘籍跨行業(yè)應(yīng)用
- 體育館翻新協(xié)議
- (新版)信息系統(tǒng)監(jiān)理師(中級)考試題庫(含答案)
- 江蘇省南通市海門區(qū)多校2023-2024學(xué)年上學(xué)期期中聯(lián)考八年級數(shù)學(xué)試卷
- 江西省南昌市南昌縣2023-2024學(xué)年七年級上學(xué)期期中地理試題
- 銘記歷史勿忘國恥(課件)小學(xué)生主題班會通用版
- 電能表安裝作業(yè)指導(dǎo)書
- 新時代外語教育課程思政建設(shè)的幾點思考
- 預(yù)制裝配式鋼筋混凝土排水檢查井標(biāo)準(zhǔn)圖集
- 第四章第3節(jié)運用選擇結(jié)構(gòu)描述問題求解過程說課 課件 2023-2024學(xué)年粵教版(2019)高中信息技術(shù)必修1
- Stable diffusion技術(shù)原理手冊
- 認(rèn)識大數(shù)據(jù) 課件 2022-2023學(xué)年粵教版(2019)高中信息技術(shù)必修1
- 兒童康復(fù)治療進(jìn)展課件
評論
0/150
提交評論