FormEditor 开发记录2 布局

接下来考虑实现第一个页面——计划页面

以往开发过的LazyDTO(保存来源于数据库的一条记录的类)的通用编辑器,由于界面太过于死板,不能符合现在的需求。

考虑的内容:

a. 布局

b. 数据绑定(以前直接用jface databinding, 用起来麻烦,毫无好感)要考虑input传进来的LazyDTO已经被很多其他的部件侦听了,所以,LazyDTO的缺省setValue的方法是不可行。

最简单的做法还是,保存的时候fire这个LazyDTO的Change event来通知其他侦听器,数据改变了。


1. 首先做一个修饰条

ContractedBlock.gif ExpandedBlockStart.gif Code
    @Override
    
protected void createFormContent(IManagedForm managedForm) {
        FormToolkit toolkit 
= managedForm.getToolkit();
        ScrolledForm form 
= managedForm.getForm();
        toolkit.decorateFormHeading(form.getForm());
        form.setText(
"项目基本信息以及计划");
        form.setImage(inputData.getImageDescriptor().createImage());
    }

2. 布局添加字段

使用了GridLayout, 以及GridData, new GridData(SWT.FILL, SWT.BEGINNING, false, false, 5, 1) 即便这里设为了横向抢占后,当文本很长的时候,文本框变得很长。用widthhint解决这个问题。

ContractedBlock.gif ExpandedBlockStart.gif Code
        GridData gridData6 = new GridData();
        gridData6.horizontalSpan 
= 3;
        gridData6.horizontalAlignment 
= org.eclipse.swt.layout.GridData.FILL;
        GridLayout gridLayout3 
= new GridLayout();
        gridLayout3.numColumns 
= 6;
        composite2 
= formToolkit.createComposite(section);
        composite2.setLayout(gridLayout3);
        formToolkit.createLabel(composite2, 
"计划开始:");
        textPStart 
= formToolkit.createText(composite2, "2009-12-30 12:30:30", SWT.SINGLE | SWT.BORDER);
        textPStart.setLayoutData(
new GridData(SWT.FILL,SWT.BEGINNING,true,false));
        formToolkit.createLabel(composite2, 
"计划完成:");
        textPFinish 
= formToolkit.createText(composite2, "2009-12-30 12:30:30", SWT.SINGLE | SWT.BORDER);
        textPFinish.setLayoutData(
new GridData(SWT.FILL,SWT.BEGINNING,true,false));
        formToolkit.createLabel(composite2, 
"工期:");
        textDur 
= formToolkit.createText(composite2, "2d", SWT.SINGLE | SWT.BORDER);
        textDur.setLayoutData(
new GridData(SWT.FILL,SWT.BEGINNING,true,false));
        formToolkit.createLabel(composite2, 
"实际开始:");
        textAStart 
= formToolkit.createText(composite2, "2009-12-30 12:30:30", SWT.SINGLE | SWT.BORDER);
        textAStart.setLayoutData(
new GridData(SWT.FILL,SWT.BEGINNING,true,false));
        formToolkit.createLabel(composite2, 
"实际完成:");
        textAFinish 
= formToolkit.createText(composite2, "2009-12-30 12:30:30", SWT.SINGLE | SWT.BORDER);
        textAFinish.setLayoutData(
new GridData(SWT.FILL,SWT.BEGINNING,true,false));
        formToolkit.createLabel(composite2, 
"历时:");
        textADur 
= formToolkit.createText(composite2, "0.5d", SWT.SINGLE | SWT.BORDER);
        textADur.setLayoutData(
new GridData(SWT.FILL,SWT.BEGINNING,true,false));
        formToolkit.createLabel(composite2, 
"负责人:");
        textManager 
= formToolkit.createText(composite2, null, SWT.SINGLE | SWT.BORDER);
        textManager.setLayoutData(
new GridData(SWT.FILL,SWT.BEGINNING,true,false));
        formToolkit.createLabel(composite2, 
"负责部门:");
        textDept 
= formToolkit.createText(composite2, null, SWT.SINGLE | SWT.BORDER);
        textDept.setLayoutData(gridData6);
        formToolkit.createLabel(composite2, 
"项目团队:");
        textTeam 
= formToolkit.createText(composite2, "测试显示长文本的状况>测试显示长文本的状况>测试显示长文本的状况>测试显示长文本的状况>测试显示长文本的状况", SWT.SINGLE | SWT.BORDER);
        GridData gd 
= new GridData(SWT.FILL, SWT.BEGINNING, falsefalse51);
        gd.widthHint 
= 400;
        textTeam.setLayoutData(gd);

 

大致上,第一个page的界面做完了。看起来VE还是比较好用的,以前一直习惯手写,可以用VE写好了,再来改。这样可能比完全手写稍微快一点。

 这个PAGE还有没有做完的工作:

1. ImageHyperLink的图片没有,所以他们都看不出来,这几个IH应该在项目状态后,用于手工修改项目的状态。当然状态的修改还是规则的,这篇文章只写如何做FormEditor,就不写那些了

2. 日期时间的控件。我初步选定用Nebula的CDateCombo.不过好像有问题。

3. 时间的运算没有做。主要是工期,计划开始,完成三者的互算,以及项目历时的计算。

4. 负责人,负责部门 是需要选的

5. 项目团队是可以选也可以填写的

 6. 客户栏位的输入,最好也有提示,可以选择已有的客户

转载于:https://www.cnblogs.com/seag/archive/2009/11/25/1610718.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值