这两天,带领组员开发一个很有复杂度的界面,因为组员对swt的layout不是很熟悉,所以在界面先后出现了很多问题。有的时候是出现异常,因为layout和layoutdata不匹配,有时候是显示不出画面。总是,能产生的问题基本都碰到了。
目前的开发思路是先用swt designer画界面,然后再手工重构整理,swt designer对于重构后的代码便不能再识别了。所以仅仅依靠可视化工具是不行的,还要对swt界面编码非常熟悉。所以对于swt layout的掌握就至关重要。
在制作自己的composite时,一定要注意:
1 外面传入的composite 一定只用一次,就是在super(parent, style);的时候用,以后自己的所有控件的父亲都是此composite本身。不要在其他任何地方使用parent了。否则的话,很有可能干扰parent中的内容,造成自身和parent里面其他控件显示错误。
2 每个composite容器一定都要设置layout,否则可能会显示不出东西。一般来说都是设置gridlayout, 如果composite本身就放置一个控件,比如说就放置一个table,那么也可以用filllayout。对于新手来说,推荐全部使用gridlayout,否则容易出现layout和layoutdata不匹配的情况,而且如果界面很复杂的话,问题是很难找到的。gridlayout完全可以替代其他layout,实现各种需求(如果有控件重叠的情况,就不行了,就要使用formlayout)。
下面是一段源码,推荐按照这种方式构建界面。
public class testcomposite extends composite ...{
private text text;
/** *//**
* create the composite
* @param parent
* @param style
*/
public testcomposite(composite parent, int style) ...{
super(parent, style);
setlayout(new gridlayout());
createarea(this);
}
private void createarea(composite parent)...{
text = new text(this, swt.border);
text.setlayoutdata(new griddata(swt.fill, swt.center, true, false));
final button button = new button(this, swt.none);
button.settext("button");
}
@override
public void dispose() ...{
super.dispose();
}
}
闽公网安备 35060202000074号