- 浏览: 7331418 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
自定义Dialog很简单,下边我们来一步步实现自定义Dialog
一、写一个类,继承自Dialog
import org.eclipse.swt.widgets.Shell;
public class TestDialog extends Dialog {
public TestDialog(Shell parentShell) {
super(parentShell);
}
}
好了,写好了,如何运行呢?
再写一个类:
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.
二、看到上边的代码是否会想到别的呢?为什么要再写一个类来运行Dialog,不能在内部写个main方法吗?
我们来试一下:
方法一:参考Jface hello world的的写法:
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();
}
}
运行一下看看什么效果,提示找不到main方法。且打印出如下Exception
java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
at org.eclipse.jface.resource.JFaceResources.getResources(JFaceResources.java:184)
at org.eclipse.jface.resource.JFaceResources.getImageRegistry(JFaceResources.java:310)
at org.eclipse.jface.dialogs.Dialog.<clinit>(Dialog.java:211)
Exception in thread "main"
为什么呢?我们是有main方法的,跟进Exception去看看吧。
发现问题出现在Dialog类的这段代码上:
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函数。
我们知道classload在加载一个类的时候,对于静态代码块会逐行执行,按照出现的先后顺序。同时父类的静态代码块一定比子类的先执行。因为
在load子类之前会先load父类。这就是为什么hello world中不会出现问题,这里会出现问题的原因。因为Dialog比ApplicationWindow多了这段静态代码。
继续追下去为什么这段代码会出现空指针异常呢,原来这段代码依赖于new Shell()必须先运行。而我们的new Shell()写在main方法里边,肯定是在加载类完成后才能运行的。所以在类内部直接写个main方法是不行的。只能单独写个类来调用。
方法二:
单独写个类如下:
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更容易出这个问题。
好了,上边只是个小插曲,继续我们的自定义Dialog.
三、去掉两个按钮
虽然Dialog天生带的两个按钮不错,但我们有的时候并不想要这两个按钮,怎么办,如何去掉它?
简单,只要我们覆盖父类的createButtonsForButtonBar这个方法就可以了,覆写这个方法,里边什么也不写
}
看一下按钮消失了。
四、加入右上角的最大化和关闭
覆写父类的这个方法:
return super.getShellStyle()|SWT.RESIZE|SWT.MAX;
}
五、改变Dialog的大小
覆写这个方法:
return new Point(300,400);//300是宽400是高
}
六、加入自己的控件
覆写createDialogArea方法
Composite container = (Composite) super.createDialogArea(parent);
container.setLayout(new RowLayout());
text = new Text(container, SWT.BORDER);
text.setLayoutData(new RowData(100,-1));
return container;
}
这里使用了RowLayout
七、加入自己的按钮
覆写initializeBounds
Composite comp = (Composite)getButtonBar();
super.createButton(comp, IDialogConstants.OK_ID, "完成", true);
}
好了这里自定义Dialog完成了,然后根据你的需要再Dialog中添加更负载的控件,更多的按钮。最后目的当然是从Dialog取道数值。
八、带提示框的Dialog
使用方法和前边相同,不同的是不是继承自Dialog而是继承自TitleAreaDialog,然后在createDialogArea中加入两行
setMessage("提示信息")
//setMessage可以加上图片,加入的办法是setMessage("提示信息",IMessageProvider.WARNING);如果想加入其他的图片,调用相应的常量。
发表评论
-
Equinox OSGi系列之三 Equinox配置参数详解(转)
2013-03-22 15:20 6952Eclipse不提示的解决办法 我们知道,在Eclips ... -
RCP自定义扩展点的应用
2010-05-06 14:21 3036打开plugin.xml文件中Extensi ... -
Nebula 的几个常用的widgets的使用
2010-05-06 14:15 5644package com.easyway.tbs.commons ... -
RCP GridViewer的学习应用
2010-05-05 21:47 4204package com.easyway.tbs.commons ... -
多项编辑页的学习应用
2010-05-05 20:41 2761package com.easyway.plugin.dev. ... -
gef中自身实现的常用功能的原理和实现
2010-04-23 21:35 2378在gef中关于常用功能对应的action在org.eclip ... -
gef中几何对齐功能原理以及实现
2010-04-23 21:34 2745几何对齐功能也是为了方便用户排列图形元素的,如果打开了此功 ... -
gef中打印功能的原理和实现
2010-04-23 21:33 2816在gef中关于打印的功能,采用PrintGraphicalV ... -
gef中采用公共的快捷键功能的原理和实现
2010-04-23 21:27 2561在gef相关的编辑器类中采用快捷键处理器KeyHandler ... -
gef 上下文菜单的应用
2010-04-23 21:26 2872在gef的编辑器视图中添加相关的上下文菜单,经常需要是实 ... -
网上流传的一个RCP Table Grid打印实现原理和局限性
2010-04-22 20:11 3254package com.easyway.tbs.common ... -
gef中编辑图中添加背景图片原理以及实现
2010-04-22 20:01 2920GEF的RootEditPart对应的Figure是一个 ... -
gef中将流程图转换图片复制粘贴原理以及实现
2010-04-22 19:59 2914设计思路如下:将一个gef图元转换为一个图片(create ... -
gef编辑器中需要采用向导页
2010-04-22 19:57 2635在一般的gef编辑器中需要采用向导页,生成一个格式的 ... -
gef中拖动拽动原理以及实现(一)
2010-04-22 19:49 3229gef中拖动拽动原理以及实现 方案一: 创 ... -
gef中添加可折叠调色板原理以及实现(二)
2010-04-22 19:47 3159gef中添加可折叠调色板原理以及实现 中主要的Palette ... -
gef中添加可折叠调色板原理以及实现(一)
2010-04-22 19:45 3150最近心情不好,写 ... -
一个用RCP实现的简单的GEF程序
2010-04-17 22:02 3493最近在学习GEF,本例 ... -
RCP 线程的开发应用
2010-03-16 15:22 2430http://www.blogjava.net/gembin/ ... -
使用Eclipse自带的PropertySheet
2010-03-03 17:36 2714在项目中遇到一些小问 ...
相关推荐
5. **对话框(Dialog)**:登录窗口可能是一个独立的 `Dialog` 对象,它继承自 `org.eclipse.jface.dialogs.Dialog` 类。对话框提供了一种方便的方式,让用户在主应用程序窗口之外输入信息,且可以自定义其大小、...
- 创建自定义视图:学习如何在Eclipse中创建一个新的View,并使用SWT/JFace控件展示数据。 - 实现对话框:创建一个带有输入框和确认按钮的对话框,用于获取用户输入并进行处理。 7. 进阶主题 - 菜单和工具栏:...
6. **对话框**:使用JFace的`Dialog`类创建自定义对话框,如`MessageDialog`, `InputDialog`等。 7. **模型-视图-控制器**:理解MVC模式在JFace中的应用,以及如何分离业务逻辑和用户界面。 8. **工作流和命令**:...
4. **视图和对话框**:JFace提供了`ViewPart`, `Dialog`等类,用于创建自定义的视图和对话框,这些类简化了窗口的生命周期管理和布局管理。 5. **树和表控件**:JFace的`TreeViewer`和`TableViewer`提供了更高级别的...
4. **颜色和字体**:SWT允许开发者自定义控件的颜色和字体,以实现个性化的用户界面。 5. **对话框**:SWT提供标准的对话框组件,如MessageDialog、FileDialog和ColorDialog,方便开发者快速创建常见的对话框。 6....
### SWT/JFace开发入门指南知识点解析 #### 一、SWT/JFace简介及目标受众 - **SWT**(Standard Widget Toolkit)与 **JFace** 是 Eclipse 平台中的两个重要组成部分,主要用于创建桌面应用程序的用户界面。 - 本...
JFace 提供了标准对话框的实现,如 MessageDialog、InputDialog 和 SelectionDialog 等,实例会展示如何创建和使用这些对话框。 6. **表和树**:SWT 和 JFace 支持复杂的数据展示,如表格(Table)和树形结构(Tree...
这涉及到SWT的Shell(顶级窗口)、Composite(复合控件)、Button和Text控件的使用,以及JFace的Dialog和Event Handling机制。 另一个例子可能是关于数据绑定,展示如何将SWT表格与Java对象的数据模型进行关联,使...
Eclipse SWT(Standard Widget Toolkit)和JFace是用于构建Java GUI应用程序的强大工具,它们与Eclipse IDE紧密集成,提供了一套高效、可扩展且平台独立的用户界面组件。本资源包含23至25章的核心应用,以下是这些...
JFace的核心组件包括视图(View)、编辑器(Editor)、对话框(Dialog)和表单(Form)。同时,JFace的Data Binding机制使得数据模型与用户界面之间的同步变得容易,增强了可维护性和可扩展性。 在Eclipse RCP中,...
SWT提供了标准的对话框组件,如InputDialog和FileDialog,也可以自定义对话框以满足特定需求。 7. **异常处理**:在处理用户输入和数据库操作时,需要考虑异常处理,确保程序的健壮性。通过try-catch-finally结构,...
JFace是建立在SWT之上的抽象层,简化了SWT的使用,提供了一些高级组件,如对话框(Dialog)、视图(View)、编辑器(Editor)等。同时,JFace还提供数据绑定、表单构建等功能。 6. SWT与Eclipse RCP Eclipse Rich...
9. 工具栏和菜单:展示了如何使用SWT和JFace创建自定义的工具栏和菜单,以及添加快捷键。 10. 资源管理:讲解如何管理和释放应用程序使用的资源,如图片、字体等。 通过深入学习和理解SWT和JFace API,开发者可以...
- 创建自定义对话框,如使用Dialog和Shell类。 - 事件驱动编程,实现用户交互响应。 - 使用Action和Command模式进行命令管理,提高代码复用性。 - 实现文件I/O操作,如读取和保存文件。 通过学习和实践这些实例...
《SWT与JFace完全指南》是一本深入探讨Java GUI编程技术的专业书籍,主要围绕SWT(Standard Widget Toolkit)和JFace两个库展开。这两者是Eclipse IDE的基础组件,用于构建用户界面,提供了丰富的控件和强大的功能,...
`org.eclipse.jface.dialogs.Dialog`则是一系列对话框的基类,可以方便地创建自定义对话框。 在压缩包中的`swt.CHM`文件很可能是一个帮助文档,包含了SWT的详细API参考。这类文档通常会列出每个类、接口、方法的...
5. **对话框和表单**:掌握如何利用JFace的Dialog和Form工具类来创建各种对话框和表单,提高用户交互体验。 6. **事件处理**:理解Eclipse事件模型,学会如何注册事件监听器,处理用户交互事件。 7. **插件结构**...
例如,可以使用SWT的Composite类来组合多个控件,构建自定义组件;使用JFace的Dialog类来创建模态对话框,展示信息或获取用户输入;利用TreeViewer和TableViewer来显示和操作数据集合,提供强大的数据浏览和编辑功能...
5. 对话框和窗口:查看如何使用JFace的Dialog类创建自定义对话框,以及如何在应用程序中使用Window类。 6. 高级组件:学习如何使用SWT中的高级组件,如TreeViewer、TableViewer等,以及如何自定义其行为。 总之,...
1.6 SWT与JFace、Eclipse 9 1.6.1 JFace是SWT的扩展 9 1.6.2 Eclipse的UI界面基于JFace 10 1.7 本章小结 10 第2章 配置SWT开发环境 11 2.1 下载和安装Eclipse 11 2.1.1 Eclipse下载页面介绍 11 2.1.2 ...