接下来考虑实现第一个页面——计划页面
以往开发过的LazyDTO(保存来源于数据库的一条记录的类)的通用编辑器,由于界面太过于死板,不能符合现在的需求。
考虑的内容:
a. 布局
b. 数据绑定(以前直接用jface databinding, 用起来麻烦,毫无好感)要考虑input传进来的LazyDTO已经被很多其他的部件侦听了,所以,LazyDTO的缺省setValue的方法是不可行。
最简单的做法还是,保存的时候fire这个LazyDTO的Change event来通知其他侦听器,数据改变了。
1. 首先做一个修饰条
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.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());
}![](https://images.cnblogs.com/cnblogs_com/seag/%E6%8D%95%E8%8E%B71.JPG)
2. 布局添加字段
使用了GridLayout, 以及GridData, new GridData(SWT.FILL, SWT.BEGINNING, false, false, 5, 1) 即便这里设为了横向抢占后,当文本很长的时候,文本框变得很长。用widthhint解决这个问题。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.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, false, false, 5, 1);
gd.widthHint = 400;
textTeam.setLayoutData(gd); ![](https://images.cnblogs.com/cnblogs_com/seag/%E6%8D%95%E8%8E%B74.JPG)
大致上,第一个page的界面做完了。看起来VE还是比较好用的,以前一直习惯手写,可以用VE写好了,再来改。这样可能比完全手写稍微快一点。
这个PAGE还有没有做完的工作:
1. ImageHyperLink的图片没有,所以他们都看不出来,这几个IH应该在项目状态后,用于手工修改项目的状态。当然状态的修改还是规则的,这篇文章只写如何做FormEditor,就不写那些了
2. 日期时间的控件。我初步选定用Nebula的CDateCombo.不过好像有问题。
3. 时间的运算没有做。主要是工期,计划开始,完成三者的互算,以及项目历时的计算。
4. 负责人,负责部门 是需要选的
5. 项目团队是可以选也可以填写的
6. 客户栏位的输入,最好也有提示,可以选择已有的客户