锁定老帖子 主题:swt/jface 自定义 Dialog
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-23
自定义Dialog很简单,下边我们来一步步实现自定义Dialog
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.widgets.Shell; public class TestDialog extends Dialog { public TestDialog(Shell parentShell) { super(parentShell); } } 好了,写好了,如何运行呢?
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell; public class Test { public static void main(String[] args) { Shell shell = new Shell(); TestDialog td = new TestDialog(shell); td.setBlockOnOpen(true); td.open(); Display.getCurrent().dispose(); } } 好了运行一下看到效果了吧,带有两个button.
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class TestDialog extends Dialog { public TestDialog(Shell parentShell) { super(parentShell); } public static void main(String[] args) { TestDialog td = new TestDialog(new Shell()); td.setBlockOnOpen(true); td.open(); Display.getCurrent().dispose(); } }
static {
ImageRegistry reg = JFaceResources.getImageRegistry(); reg.put(DLG_IMG_MESSAGE_INFO, ImageDescriptor.createFromFile( Dialog.class, "images/message_info.gif")); //$NON-NLS-1$ reg.put(DLG_IMG_MESSAGE_WARNING, ImageDescriptor.createFromFile( Dialog.class, "images/message_warning.gif")); //$NON-NLS-1$ reg.put(DLG_IMG_MESSAGE_ERROR, ImageDescriptor.createFromFile( Dialog.class, "images/message_error.gif")); //$NON-NLS-1$ } 原来在静态代码块上出现了Exception,造成在运行main函数之前就退出了。所以才说没有main函数。 继续追下去为什么这段代码会出现空指针异常呢,原来这段代码依赖于new Shell()必须先运行。而我们的new Shell()写在main方法里边,肯定是在加载类完成后才能运行的。所以在类内部直接写个main方法是不行的。只能单独写个类来调用。
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell; public class Test { public static void main(String[] args) { TestDialog td = new TestDialog(new Shell()); td.setBlockOnOpen(true); td.open(); Display.getCurrent().dispose(); } } 依然是不行的,报同样的错误,为什么?仔细看一下,我们把new Shell()写在构造函数的参数里,其实范了和刚才同样的错误。所以单独提出new Shell(),写在构造函数之前。就得到了文章开始的Test类。平时我们使用的时候为什么不出这个问题呢?因为我们平时使用的时候Dialog从里不是单独存在的,在之前shell早被构造过了。反而是demo更容易出这个问题。
protected void createButtonsForButtonBar(Composite parent) {
}
protected int getShellStyle(){
return super.getShellStyle()|SWT.RESIZE|SWT.MAX; }
protected Point getInitialSize(){
return new Point(300,400);//300是宽400是高 } 六、加入自己的控件
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent); container.setLayout(new RowLayout()); text = new Text(container, SWT.BORDER); text.setLayoutData(new RowData(100,-1)); return container; }
protected void initializeBounds(){
Composite comp = (Composite)getButtonBar(); super.createButton(comp, IDialogConstants.OK_ID, "完成", true); } 好了这里自定义Dialog完成了,然后根据你的需要再Dialog中添加更负载的控件,更多的按钮。最后目的当然是从Dialog取道数值。
setTitle("标题");
setMessage("提示信息") //setMessage可以加上图片,加入的办法是setMessage("提示信息",IMessageProvider.WARNING);如果想加入其他的图片,调用相应的常量。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 3460 次