點(diǎn)擊查看:2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門(mén)教程章節(jié)匯總
15.1 創(chuàng)建狀態(tài)欄
Sketcher程序的一個(gè)局限性在于,你不能直接得到有關(guān)當(dāng)前所選圖元的類(lèi)型和顏色的反饋信息。從本章開(kāi)始,我們將逐步紅正這個(gè)缺陷。對(duì)于顯示各種應(yīng)用程序參數(shù)的狀態(tài)來(lái)說(shuō),應(yīng)用Windows的狀態(tài)欄是一種通用、便捷的方式。
我們可以構(gòu)造自己的StatusBar類(lèi),它將定義一個(gè)狀態(tài)欄。理想的方法是設(shè)計(jì)一個(gè)通用的狀態(tài)欄,然后再為Sketcher定制它,但實(shí)際上我們將采用一種簡(jiǎn)單方法,即為Sketcher設(shè)計(jì)一個(gè)特定的狀態(tài)欄類(lèi)。JPanel類(lèi)描述了窗格,所以它是構(gòu)造StatusBar,類(lèi)的合適的基類(lèi)。我們可以使用JLabel類(lèi)作為定義狀態(tài)欄窗格的基類(lèi),為了突出顯示再加一個(gè)凹形的邊框。
我們從在Skether的底部構(gòu)造一個(gè)具有兩個(gè)窗格的狀態(tài)欄開(kāi)始,這兩個(gè)窗格分別顯示了當(dāng)前圖元的類(lèi)型和顏色。此后我們就可以準(zhǔn)確地知道將要繪制的圖元。我們先定義一個(gè)StatusBar類(lèi),用它來(lái)描述應(yīng)用程序窗口中的狀態(tài)欄,然后在Statusl3ar類(lèi)中再定義一個(gè)StatusPane類(lèi)。、
這是一個(gè)StatusBar類(lèi)的最初定義:
//class defining a status bar
import javax.swing.*;
如何工作因?yàn)镾tatusBar實(shí)現(xiàn)了Constants接口,所以所有描述可用圖元類(lèi)型和顏色的變量都可以使用。StatusBar的框架版木有兩個(gè)StatusPane類(lèi)烈的數(shù)據(jù)成員,它們分別明來(lái)顯示當(dāng)前的顏色和圖元的類(lèi)型。StatusPane最初顯示的信息作為String對(duì)象傳遞給構(gòu)造函數(shù)。
在StatusBar的構(gòu)造數(shù)中,我們通過(guò)調(diào)用SetColorPane()和setTypePane()方法更新每個(gè)窗格上的顯示信息。這樣做就確保了StatnsPane對(duì)象最初將顯示我們?yōu)閼?yīng)用程序定義的默認(rèn)顏色以及圖元類(lèi)型。在需要更新?tīng)顟B(tài)欄時(shí),就要凋用這些方法中的某一個(gè)或幾個(gè)。當(dāng)我們結(jié)束了StatusPane的細(xì)節(jié)內(nèi)容后,也就完成了setColorPane()和setTypePanse()的定義。
StatusBar窗格有一個(gè)在構(gòu)造函數(shù)中設(shè)置的F1owLayout管理器。狀態(tài)欄中的窗格僅顯示少量的文本,因此我們從J1abe1類(lèi)派生了StatusPane類(lèi),這樣一來(lái)狀態(tài)欄下的窗格就是一種特殊的Jlahel.這就意味著我們可以調(diào)用從Jlahel繼承過(guò)來(lái)的setText()方法為自己的StatusPane設(shè)置文木。當(dāng)這些文木加到狀態(tài)欄時(shí),StatusPane對(duì)象將左對(duì)齊,這是由 StatusBar構(gòu)造函數(shù)中調(diào)用setLayout()方法的第一個(gè)自變量決定的。布局管理器將會(huì)在狀態(tài)欄的窗格之間的水平方向留出10個(gè)像素的間隔,在組件之間的垂直方向留出3個(gè)像素的間隔。狀態(tài)欄的邊框是一條暗灰色的線,它是利用BorderFactory方法添加的。
在StatusFane類(lèi)中惟一的數(shù)據(jù)成員是Font類(lèi)型的對(duì)象font.我們?yōu)榇案裎谋径x了大小為10磅的標(biāo)準(zhǔn)Serif字體。在構(gòu)造函數(shù)中,我們將背景顏色設(shè)置為淺灰色,前景顏色設(shè)置為暗灰色以及標(biāo)準(zhǔn)字體。我們還調(diào)用了繼承過(guò)來(lái)的方法setHorizontalAlignment(),將對(duì)齊方式用CENTER設(shè)置為中心對(duì)齊,這是在基類(lèi)JLahel中定義的。
如果我們可以保持每個(gè)窗格的寬度固定不變,在更改文本內(nèi)容時(shí),就更改以防止來(lái)回跳躍。因此我們可以用setPreferredSize()方法將窗格的尺寸設(shè)置為最長(zhǎng)文本所需的最小值。最后在StatusPane的構(gòu)造函數(shù)中通過(guò)調(diào)用繼承過(guò)來(lái)的setText()方法設(shè)置窗格的文本。
相關(guān)推薦:
2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門(mén)教程章節(jié)匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |