一天一夜没睡,又搞定了很多功能.
本来想弄完再上床,思路是有的,但发现时间还是不大够,现在大脑有点点疲惫了...呵呵,只有上来写写笔记,写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,可以让它分别实现:addSelectionChangedListeneraddDoubleClickListeneraddKeyListener4)用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