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