一天一夜没睡,又搞定了很多功能.
本来想弄完再上床,思路是有的,但发现时间还是不大够,现在大脑有点点疲惫了...呵呵,只有上来写写笔记,写RCP的过程就是学习的过程,其中的知识点不记下来容易忘记哦.
1.关于View里的许多事件监听:
我在写自己的代码前看了在eclipse里面找代码看了看,学到了不少,在eclipse的世界里,许多法则都很重要,在我看来,如果要说哪个最重要的话,就应该是"有样学样"法则了:P
毕竟,基本上你需要的功能,人家都写过了,你自己的办法也许很好,但是看别人的代码,你会发现自己的代码是那么蹩脚,加上eclipse本来把扩展性放到首位的,里面的代码很多都相当优秀,就是一个大宝库.
但是这么大的宝库,太大了,容易吓到人,尤其是象我这样的菜鸟.其实,只要用好eclipse自带的搜索功能,强迫自己多试两次就好了.
比如我要查别人写的View的代码,我有两种方法,都很简单:1)直接按类名查:输入*view<就可以了.2)按方法查:View一定有createContextMenu()吧,按方法名查找也能找到.
我看的是AntView的代码,有下面这些要点值得注意:
1)让它实现IResourceChangeListener接口
当整个Workbech有任何文件有改动时会接受到事件.
2)写一个Update接口,里面只有一个方法update();让所有的Action都实现这个接口,然后在View里用一个list装下所有产生的action.
再写一个updateProjectActions方法,当有资源改变时就调用它,依次update所有action.就能够及时的让action改变状态,比如能用或是不能用.
private void updateProjectActions() {
Iterator iter = updateProjectActions.iterator();
while
(iter.hasNext()) {
((IUpdate) iter.next()).update();
}
}
3)让view里的control实现几个常用的接口.
比如,如果view里面是一个treeViewer,可以让它分别实现:
addSelectionChangedListener
addDoubleClickListener
addKeyListener
4)用IMemento保存view的状态,这样关掉view再打开都没有影响,本来以为这个方法不大好用,今天算是见识到实例了:P改天好好研究研究.
2.两个eclipse里的小技巧:
1)在当前代码编辑editor里,按Ctrl+t,可以看到它的所有超类和子类,很方便.
2)Ctrl + 1是让eclipse自动修补错误,很方便.
3.关于窗口里的数据格式的判断
这看起来好象很简单,我发现其实里面也蛮有学问的,特别是一个窗口里有多个输入数据需要判断格式是否正确的时候.
就拿我的程序来说吧,如下的窗口,要判断是否有空白栏,要判断时间日期的格式,要判断价格是否为float,然后日期年月日要在一个正常的范围
里,还要友好的提示用户.
我没有看代码,因为Jface提供一个类似的工具,我自己干脆直接写了算了,以后有时间再换.
刚开始的方法很烂,到一半想到一个好方法,这样的思路:
private int
BLANK_ERROR = 0,
PRICE_ERROR = 0,
FORMAT_ERROR = 0,
YEAR_ERROR = 0,
MONTH_ERROR = 0,
DAY_ERROR = 0;
//这个字符串数组第一个为"",我的方法优点就在于这里
private String[] ERROR = new String[]{
"",
"您有些重要信息没有填",
"请输入正确的价格形式,为数字",
"请输入正确的时间格式,例如:2006-1-20.",
"请检查输入年的范围,系统默认在1960-2050之间.",
"请检查输入月份范围在1-12之间.",
"请检查输入日的范围在1-31之间"
};
//然后每个检查的方法在检查后,如果有错就把对应的数字改为一个整数,第一个为1,第二个方法为2,依次类推...
private void checkBlank(){
BLANK_ERROR = 0;
setData();
boolean isBlank = false;
for(int i = 0; i< data.length; i++){
if(data[i].equals("")){
isBlank = true;
break;
}
}
if(isBlank)
BLANK_ERROR = 1;
}
/**
* check if the price if a float
*/
private void checkPrice() {
PRICE_ERROR = 0;
boolean notFloat = false;
try {
new Float(price.getText().trim()).floatValue();
}catch(Exception e) {
notFloat = true;
}
if(notFloat)
PRICE_ERROR = 2;
}
...
然后判断错误直接用||操作符几个简单的if else就搞定了,象这样:
if(PRICE_ERROR != 0||YEAR_ERROR != 0 || MONTH_ERROR != 0|| DAY_ERROR != 0){
MessageDialog.openInformation(getShell(), "Information",
ERROR[YEAR_ERROR] + "\n" +
ERROR[MONTH_ERROR]+ "\n" +
ERROR[DAY_ERROR] + "\n" +
ERROR[PRICE_ERROR]);
return false;
}
哪个有错误,会自动显示对应的错误提示,哪一个没错也不要紧,因为ERROR[0]是空字符串.
这个方法我自己想出来的,一定有更简单的方法,以后看到再说咯.
4.关于eclipse RCP程序的导出,费了很大的劲,哎,一言难尽,以后时间多了再慢慢说,而且我现在还不是懂得特别多.
关于RCPFinance Pro的v2.0的计划,我现在的进度是这样的:
1)Table View增加删除数据功能.
2)检查时间的格式,能对适当列进行排序.
3)增加对鼠标事件的支持.
4)支持同时修改多份数据.
5)打开新文件时,如果没有保存则提示用户.
6)安全读写文件.
7)增加Help文档.
8)增加intro view.
9)增加Perspective.
10)增加自动升级功能.
5.放几个截图上来:
intro view
帮助
按F1,弹出对应的动态帮助
升级,搜索扩展,管理扩展:
嘿嘿,等会就睡觉了,争取两天内搞定2.0