Eclipse 4 RCP:Handled ToolItem、Direct ToolItem与Toolcontrol的区别咨询
在Eclipse 4 RCP开发中给工具栏加组件时,这三个选项确实容易让人懵,我来拆解下它们的核心差异和适用场景:
Handled ToolItem:这是E4官方最推荐的工具栏项,完全贴合Eclipse的「命令(Command)-处理程序(Handler)」架构。你只需要把它绑定到一个预先定义好的Command上,具体的执行逻辑由对应的Handler实现,不用在组件本身写业务代码。
这种方式的优势是高度解耦——按钮的展示(图标、文字)和业务逻辑彻底分开,同一个Command还能绑定到菜单、快捷键上,复用性拉满。比如做「保存」功能,工具栏按钮、菜单里的保存选项、Ctrl+S快捷键都能共用同一个Handler,维护起来特别省心。另外它还支持自动同步命令的启用/禁用状态,比如当没有可保存的内容时,按钮会自动灰掉,只要你的Handler实现了isEnabled()方法就行。Direct ToolItem:这个就如其名,走的是「直接绑定逻辑」的路子,不依赖Command框架。你可以直接给它绑定点击事件(比如通过
setSelectionListener,或者在EMF模型里指定直接调用的方法)。
它适合逻辑极简单、不需要复用的小功能,比如一个快速切换视图的按钮,逻辑就是一行代码的事儿,犯不着折腾Command-Handler那套流程。但缺点也很明显:没法和菜单、快捷键复用逻辑,也不能自动同步启用状态,得自己手动处理,复杂场景千万别用它。ToolControl:这和前两个完全不是一个类型——它不是按钮,而是允许你在工具栏中嵌入自定义SWT控件的容器。
如果你想在工具栏里放搜索文本框、下拉选择器、进度条甚至是自定义的小面板,就得用ToolControl。你需要实现IToolControl接口,或者用注解指定对应的类,在类里创建并返回你的SWT控件。它的核心作用就是扩展工具栏的UI能力,让工具栏不止能放按钮,还能承载各种复杂交互控件。
总结下选型思路:
- 需复用、遵循E4架构的功能 → Handled ToolItem
- 简单独立小功能 → Direct ToolItem
- 非按钮类自定义UI → ToolControl
内容的提问来源于stack exchange,提问作者Chin

