Posted on 2007-07-27 20:16
云自无心水自闲 阅读(21693)
评论(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函数中。