Posted on 2006-11-08 15:23
小小凉粉 阅读(2193)
评论(0) 编辑 收藏
目的1:
打开一个新的对话框时,如何设定它和父对话框的相对位置?比如在登录对话框有一个“创建新帐号”的按钮,用户点击以后,就出现新的对话框用于注册,请问如何能让新的对话框和旧对话框排列的整齐一些?应该是能设定二者的相对位置吧?最开始,以为要用
Shell.setLocation来设置,但是对于一个Dialog而言,它的Shell在什么时候才能初始化呢?
我
在构造函数里面,configureShell(Shell newShell)方法里面,Control
createDialogArea(Composite
parent)方法里面都调用过了this.getShell方法想得到当前的Shell,结果都抛出空指针异常....
后来看书发现,应该重写protected Point getInitialLocation(Point initialSize)方法
比如,在最开始的例子中,在第二个对话框中我重写了该方法,代码如下:
protected Point getInitialLocation(Point initialSize) {
Point location = new Point(this.getParentShell().getLocation().x
+ this.getParentShell().getBounds().width, this
.getParentShell().getLocation().y
+ this.getParentShell().getBounds().height
- this.getInitialSize().y);
return location;
}
其结果就是两个对话框底部对齐的平行排列:)
目的2: 登陆对话框要记住上次的位置。
想了半天,好像只能用IPreferenceStore来做了,在继承了AbstractUIPlugin的类中放入两个常量:
public static final String LOGINDIALOG_POSITION_X = "LOGINDIALOG_POSITION_X";
public static final String LOGINDIALOG_POSITION_Y = "LOGINDIALOG_POSITION_Y";
然后重写两个方法:
@Override
protected Point getInitialLocation(Point initialSize) {
String xposition = preferenceStore
.getString(Peer68TPlugin.LOGINDIALOG_POSITION_X);
String yposition = preferenceStore
.getString(Peer68TPlugin.LOGINDIALOG_POSITION_Y);
if (xposition == null || yposition == null || xposition == ""
|| yposition == "") {
return super.getInitialLocation(initialSize);
} else {
return new Point(Integer.parseInt(xposition), Integer
.parseInt(yposition));
}
}
@Override
public boolean close() {
preferenceStore.setValue(Peer68TPlugin.LOGINDIALOG_POSITION_X, this
.getShell().getLocation().x);
preferenceStore.setValue(Peer68TPlugin.LOGINDIALOG_POSITION_Y, this
.getShell().getLocation().y);
return super.close();
}
大功告成!