Posted on 2007-07-27 20:16
云自無(wú)心水自閑 閱讀(21794)
評(píng)論(4) 編輯 收藏 所屬分類:
Java 、
心得體會(huì)
最近做的一個(gè)程序是用Swing的,要求能夠根據(jù)不同的分辨率自動(dòng)調(diào)整界面上所有組件的大小。也就是說(shuō)不是寫(xiě)死是1024×768,并且字體也需要根據(jù)大小自動(dòng)變化。
我使用的工具是Netbeans,為實(shí)現(xiàn)動(dòng)態(tài)變化,我使用了GridBagLayout。首先,新建一個(gè)類,繼承JPanel。然后設(shè)置JPanel的Layout為GridBagLayout。當(dāng)然,根據(jù)情況,可以和Html中的表格一樣,Panel里面嵌套Panel,要點(diǎn)是每個(gè)Panel的Layout都設(shè)置為GridBagLayout(使用其他的Layout也可以實(shí)現(xiàn)這樣的功能,但是個(gè)人感覺(jué)GridBagLayout最容易控制和使用)。
Layout的設(shè)置只是第一步,缺省情況下,GridBagLayout會(huì)把Panel中所有的組件排成一行,從左到右逐個(gè)排放。這時(shí)候,就要使用Customize Layout(定制布局)的功能,點(diǎn)擊后,會(huì)再?gòu)棾鲆粋€(gè)窗口
在新的窗口中,可以拖動(dòng)Panel里面的組件,象表格一樣,組織安放所有的組件,相當(dāng)方便。
這些步驟完成后,重要的兩個(gè)屬性是,填充(Fill),建議把所有組件的Fill屬性,都選成Both,也就是水平和垂直方向都延伸填充。這樣,Panel里面的所有組件會(huì)平鋪開(kāi)來(lái),占滿Panel的所有空間。那么,如何調(diào)整這些組件的大小呢?需要使用weightx和weighty這兩個(gè)屬性。這兩屬性的值使用0.0~1.0之間的小數(shù),數(shù)越大,組件所占據(jù)的空間越大。
通過(guò)以上的設(shè)置,就可以實(shí)現(xiàn)組件大小隨著Panel大小的變化而變化了。
那么,又如何實(shí)現(xiàn)字體的變化呢?這個(gè)只能通過(guò)編程實(shí)現(xiàn)了。但是initComponents函數(shù)里的代碼都是自動(dòng)生成的,如何添加自定義的代碼呢。點(diǎn)擊屬性面板里的字體屬性后面的小方框,在彈出的對(duì)話框里,點(diǎn)擊高級(jí)按鈕,勾選“生成初始化后的代碼”,然后在文本框里,輸入代碼,這段自定義代碼,會(huì)在每次自動(dòng)生成代碼的時(shí)候,添加到initComponents函數(shù)中。