1,简介

PDI界面使用了xul技术。通过配置xul文件就可以修改界面了。其次,具体图形界面的开发也用到了eclipse swt 和 Jface包。本文记录如何修改PDI的主界面的菜单栏,并新添加的菜单栏上做一些操作。

2,PDI中的xul配置

主要的配置文件有两个spoon.xul 和 menubar.xul。它们在项目主目录的 ui 目录下。spoon.xul 中定义了主界面的菜单栏、工具栏,同时也引用了 menubar.xul

<pen:include src="menubar.xul" ignoreroot="true"/>

munubar.xul 用来定义主界面的菜单。修改menubar.xul就可以修改菜单栏了。

此外,启动界面的修改主要在这里:

Splash splash = new Splash(display);

3,具体操作步骤

根据menubar.xul中已有的格式新增一个菜单栏:

<menuitem id="submit-to-storm" label="${Spoon.Menu.File.SubmitToStorm}" command="spoon.submitToStorm()" />

其中, id 将会在PDI的main 类 Spoon.java 中相关语句用到。id 用来定位此菜单栏。 label 表示在该菜单栏上显示的内容,为了国际化,使用了一个单独的message文件来保存内容,在

src\org\troy\di\ui\spoon\messages 目录下的 zh 文件中新增该菜单显示的内容即可。效果图如下:

再分析下PDI是如何解析xul文件的:

1 mainSpoonContainer = xulLoader.loadXul(XUL_FILE_MAIN, new XulSpoonResourceBundle());//XUL_FILE_MAIN=spoon.xul
2
3  mainSpoonContainer.addEventHandler(this);//add listener
4
5 mainSpoonContainer.getDocumentRoot().getElementById("spoon-menubar");//add menubar
6
7  mainToolbar = (XulToolbar) mainSpoonContainer.getDocumentRoot().getElementById("main-toolbar");//add toolbar

增加了menu之后,那么点击该menu之后,如何响应呢?这是由menubar.xul中的 “command” 来定义。它指定了当点击menu时,在Spoon类中需要执行的方法。比如,可以在点击menu之后,弹出一个文件选择对话框,只需要在"command"指定的方法里面生成一个FileDialog即可。

String[] filterExtensions = {"*.ktr", "*.kjb"};//设置过滤文件
FileDialog dialog = new FileDialog(shell, SWT.OPEN);//生成一个文件对话框
dialog.setFilterExtensions(filterExtensions);
String fname = dialog.open();//fname 获得在文件对话框中选择了哪个文件的路径

这样,使用 fname 就可以对该文件进行进一步操作了。

4,PDI界面编程

PDI中的各种对话框、选择框……主要是用 eclipse swt 和 jface 包中的类来实现的。对于 eclipse swt 编程需要import 以下的包:

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;

然后需要 Display对象和 Shell 对象持有 swt 中的各种组件。然后就可以往 shell 中添加各种组件了。

Display display = new Display();
Shell shell = new Shell(display);

5,PDI中的文件操作

PDI借助 Java IO包和 org.apache.commons.vfs 包 实现KettleVFS.java ,通过KettleVFS类来实现文件系统的各种操作。比如实现文件复制:

 1         BufferedInputStream fis = null;
 2         BufferedOutputStream fos = null;
 3
 4         try {
 5
 6             fis = new BufferedInputStream(KettleVFS.getInputStream(in));
 7             fos = new BufferedOutputStream(KettleVFS.getOutputStream(out, false));
 8
 9             byte[] buf = new byte[1024 * 1024]; // copy in chunks of 1 MB
10             int i = 0;
11             while ((i = fis.read(buf)) != -1) {
12                 fos.write(buf, 0, i);
13             }
14             fos.flush();
15             fos.close();
16             fis.close();

5,参考资料

swt 编程参考文档

本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/,如需转载请自行联系原作者

Pentaho Data Integration 界面开发相关推荐

  1. Pentaho Data Integration - Kettle 入门指南

    Pentaho Data Integration - Kettle 入门指南 PDI(Pentaho Data Integration,或者Kettle)是一款开源的ETL工具,可以用它来对数据进行抽 ...

  2. Pentaho Data Integration(Kettle) 6.0

    Pentaho Data Integration(Kettle) 插件开发调试环境搭建(上) 1. 下载源码  https://github.com/pentaho/pentaho-kettle/ 2 ...

  3. pentaho-server 与 Pentaho Data Integration(pentaho-kettle)

    一.pentaho的两个产品 (pentaho已经被Hitachi Vantara 收购) pentaho-server:内置 Pentaho BI服务器 及 管理控制台. Pentaho Data ...

  4. Pentaho Data Integration初步安装

    更新一下: Kettle(PDI)版本升级到9.1之后,安装简单了很多,JDK装完,重启,然后运行set-pentaho-env.bat,驱动拷过去,就能用了.以下内容看来用不上了. -------- ...

  5. ETL-kettle/pentaho的二次开发

    PDI的源码地址: GitHub - pentaho/pentaho-kettle: Pentaho Data Integration ( ETL ) a.k.a Kettle pentahoserv ...

  6. 微信小程序开发登录界面mysql_微信小程序 欢迎界面开发的实例详解

    微信小程序 欢迎界面 市面上大多数的app都会有一个欢迎界面,下面将演示如何通过微信小程序实现一个欢迎界面. 下面将会按照以下的顺序介绍: 布局的实现 逻辑的实现 样式的实现 1.布局的实现 整个布局 ...

  7. android的webView的教程,Android WebView 应用界面开发教程

    WebView组件本身就是一个浏览器实现,Android5.0增强的WebView基于Chromium M37,直接支持WebRTC.WebAudio.WebGL.开发者可以直接在WebView中使用 ...

  8. wpf 大数据界面_24小时删!WPF 界面开发可视化数据源500行代码分享

    通过DevExpress WPF Controls,您能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案. 在本教程中,您将完成可视化数据 ...

  9. AliOS Things图形界面开发指南

    简介   物联网设备开发过程中,嵌入式GUI(用户图形界面)的开发是一个重要的组成部分.许多智能设备如智能家电.智能手表.智能仪表上都会涉及到GUI开发.AliOS Things集成开源图形库litt ...

最新文章

  1. 优艾智合机器人科技_在全球最大工业机器人消费市场,优艾智合如何助力产业智能化?...
  2. 【小练习01】CSS--PS提示框制作
  3. python 如何编写图像标定(标记)(annotation)画框程序?
  4. 渗透测试神器CS(4.0)的使用
  5. 编写一个程序求输入字符串的长度
  6. Adroid新增硬件编解码
  7. 深入理解Java反射+动态代理,java开发面试笔试题
  8. [基础]全局组、域本地组、通用组的区别与联系
  9. 1.1 为什么选择Excel绘制论文图表
  10. Kaggle实战之leaf classification(树叶分类)
  11. RoboWare Studio使用的部分问题
  12. 大数据平台技术架构-图
  13. 遥感图像通用数据格式(BSQ\BIL\BIP)的理解
  14. 字节跳动做教育能否摆脱互联网公司“流量魔咒”?
  15. 组合预测模型:bagging
  16. 关于我的一些学习感悟
  17. linux下安装微软雅黑字体库
  18. MySQL数据库:表结构优化
  19. Boot Loader点点滴滴(转)
  20. PHP独立ip统计,通过nginx日志统计独立ip的个数 新乡独立ip 独立ipvps 独立公网i

热门文章

  1. rotate.js实现图片旋转 (chrome,IE,firefox都可以实现)
  2. css属性pointer-events
  3. [原]为虚拟机添加新的磁盘分区
  4. 给力开源,.Net开源地址大收集
  5. SqlServer2005数据库分区
  6. rsync同步和备份文件到本地
  7. 【Dubbo源码阅读系列】之远程服务调用(上)
  8. 大佬带你深入浅出Lua虚拟机
  9. 安装php ssh2扩展
  10. vscode snippet利器