浏览 12221 次
锁定老帖子 主题:用RCP实现MSN风格的登录窗口
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-26
LoginDialog,用于展示状态, LoginListener,用于监听登录状态,并根据不同的情况改变LoginDialog的显示 LoginAction,用于执行登录的业务逻辑,并且根据不同的结果来fire不同的动作。 状态一共有以下几种: 1。登录中 2。登录成功 3。登录失败 3.1 连接失败 3.2 用户名密码错误 3.3 ..... 4。用户取消登录 下面是代码片段: Application:
LoginListener:
LoginAction:这里要用到Job,因为登录的逻辑处理必须要在异步线程中来做,否则UI就会停住的。
LoginDialog: 这里用到了StackLayout,因为在登录的过程中,需要在显示用户名/密码的位置上,显示gif动画,所以在createDialogArea的时候,要创建一个主Composite,然后将其layout设置为StackLayout,然后创建两个Composite,将其parent都设置为主Composite,新创建的两个我将其命名为loginInfoComposite和loginAnimaComposite,顾名思义,一个用来显示登录信息,一个用来显示登录动画。 关于如何显示gif,我在这里就不多说了,因为SWT Snippet和Eclipse的SWT Example里面都有对应的例子,我在这里推荐大家去参考一下SWT Example,因为那里面是用Canvas来绘图的,这也是我们所需要的。 在使用StackLayout的时候要注意,当我们使用stackLayout.topControl = xxx的时候,还要调用stackLayout.layout()方法,否则会不起作用。 还有就是因为在登录的过程中,按钮栏应该是不可见的,但是Dialog的getButtonBar方法是protected的,所以就重写了这个方法,声明为public,返回super.getButtonBar(),虽然源码的注释中写着这个方法不应该重写,但是我想,这样子应该没问题吧。 另外,在绘制gif的下方添加一个按钮,并且addSelectionListener,当SelectionEvent发生的时候,就去触发loginAction的fireCancel方法就可以了。 细节就不描述了,下面是一些个人认为比较关键的代码片段:
然后是LoginListener的实现类:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-12-26
现在线程的中断实际上是自己负责了,
定一个中断标志的成员变量,然后在运行中检查这个标志, 如果为真则退出循环之类的。 class TT extends Runnable { private int flag=1; public void run() { while (flag == 1) { try { Thread.sleep(10000); }catch (Exception e) { } } } public void stopThread() { flag = 0; } } |
|
返回顶楼 | |
发表时间:2006-12-26
哦,是这个样子的啊,看到过这样的实现,但是不知道为什么一直没看懂,现在明白啦:)谢谢!
|
|
返回顶楼 | |
发表时间:2007-01-24
你好,我现在也在进行RCP的开发,也想实现像你这样的登录界面,但是我把我的LoginDialog放到Application中的时候就报错,我的LoginDialog实现的是jface.Dialog,请教一下这是怎么回事?谢谢
|
|
返回顶楼 | |
发表时间:2007-01-24
[quote="pirateship"]你好,我现在也在进行RCP的开发,也想实现像你这样的登录界面,但是我把我的LoginDialog放到Application中的时候就报错,我的LoginDialog实现的是jface.Dialog,请教一下这是怎么回事?谢谢[/quote] 你可以试一下在自己的ApplicationWorkbenchAdvisor里重写openwindows。 |
|
返回顶楼 | |
发表时间:2007-01-25
。。。
|
|
返回顶楼 | |
发表时间:2007-01-25
[quote="pirateship"]你好,我现在也在进行RCP的开发,也想实现像你这样的登录界面,但是我把我的LoginDialog放到Application中的时候就报错,我的LoginDialog实现的是jface.Dialog,请教一下这是怎么回事?谢谢[/quote]
贴一下代码啊,要不然我怎么知道怎么回事.... |
|
返回顶楼 | |
发表时间:2007-06-05
楼上是在做梦么?
|
|
返回顶楼 | |