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