InvokeUI让人耳目一新的桌面程序开发框架,原来Java也可以这样不走寻常路

 

InvokeUI是一个Java桌面程序开发框架。

 

 它将Flex界面API进行Java本地封装,以实现用Java快速构建

 漂亮桌面程序的目的。InvokeUI框架构建于SmartInvoke之上,整个

 系统结构如下:

 


SmartInvoke:

 

  提供Java与Flash互调的功能,它是InvokeUI功能得以实现的核心。

  项目地址:http://smartinvoke.cn

 

Swt :

 

SmartInvoke与InvokeUI都是构建在Swt之上的,它是基础。


InvokeUI的目标:

 

 

  1. 使Java程序员在完全不懂Flex的情况下也可以快速写出漂亮的客户端程序。
  2. 支持第三方Flex 库的动态加载,以增强标准flex库的功能。
  3. 支持将第三方Flex API自动转换为对应jar库文件,方便java调用。
  4. 完全针对swf进行动态调用,避开Flex SDK编译花费的时间,使程序开发更敏捷更愉快
  5. 支持类似mxml的界面定义语言,快速构建程序界面

 


演示程序截图:
      
     听起来有点儿玄乎上图上源代码让大家信服示例程序运行效果如下图:
     


 

嘿嘿,看起来有点儿流口水吧,此示例程序的源代码为一个eclipse java项目的压缩包,已上传到附件中。下面来讲解下本示例

程序的结构及代码。

   示例程序的项目名称为DemoIUI,test.IUIDemoTester为项目的入口类,执行他的main方法就可以运行示例程序了。

   swfs目录下为InvokeUI运行时需要载入的swf文件及图片。

   libs目录下为本项目引用的外部库

           flex.jar为flex的Java封装库。

           invokeUI.jar为 InvokeUI框架的核心库,cn.smartinvoke.core.jar为smartinvoke通信库,其他为swt/jface库。

    从这些库中你可以发现InvokeUI是构建在swt与smartinvoke之上的。

 

 

test.MainShell类为示例程序的主窗口,他继承自IUIShell,当swf载入完毕后,flex就准备好接受Java的调用了,但是现在窗口

还是白白的什么都没有,所以我们在loadComplete方法中添加界面的创建代码,添加一些控件到窗口之上。

代码如下:

    protected void loadComplete() {

		 //设置Application布局
		 app.setStyle("verticalAlign", "middle");
		 /**
		  * 通过调用wm变量的create方法,调用flex创建一个ToggleButton按钮,
		  * wm在这里为WidgetManager类型对象,java是通过他实现对flex的调用
		  * 的
		  */
		 ToggleButton toggleButton=wm.create(ToggleButton.class);
		 toggleButton.setLabel("点击改变程序外观");
		 toggleButton.setWidth(200);
		 toggleButton.setHeight(50);
		 /**
		  * app为mx.core.Application类型对象,熟悉Flex的朋友知道他是一个
		  * 顶层对象,是整个窗口显示控件树的根
		  */
		 app.addChild(toggleButton);
		 
		 //添加click监听器
		 toggleButton.addClickListener(new MouseEventListenerAdapter(){
			 //这里的皮肤swf由flash builder导出
			String path=Environment.getLocation()+"/styles/spark_cobalt.swf";
			public void click(MouseEvent e) {
				 ToggleButton target=(ToggleButton)e.getCurrentTarget();
				 System.out.println(target);
			}
			
		 });
		 
	}
 

      怎么样,是不是感觉跟swing比较像呢?

 

     创建表格:

 

               //创建表格并设置样式

			final DataGrid dataGrid=wm.create(DataGrid.class);
			dataGrid.setPercentHeight(100);
			dataGrid.setPercentWidth(100);
			dataGrid.setRowHeight(30);
			//设置itemRenderer的meta信息
			List<Object> data=new ArrayList<Object>();
			FlexObject metaObj=new FlexObject();
			metaObj.put("c2", DataGridRendererComponent.class.getName());
			//构造数据
			for(int i=0;i<800;i++){
			    Map<String,Object> map=new HashMap<String, Object>();
			    map.put("c1", ""+i);
			    map.put("c2", "第二列_"+i);
			    map.put("c3", "第三列_"+i);
			    map.put(IUIConstants.META_TYPE_PROPERTY_NAME, metaObj);
				data.add(map);
			}
			dataGrid.setDataProvider(data);
			//设置第一列
			DataGridColumn c1=wm.create(DataGridColumn.class);
			c1.setHeaderText("c1Text");
			c1.setDataField("c1");c1.setWidth(200);
			//设置列的格式化函数
			c1.setLabelFunction(new FlFunction(){
				@Override
				public Object execute(Object[] params) {
					//Object[] pars=(Object[])params[0];
					FlexObject obj=(FlexObject)params[0];
					String idVal=obj.get("c1")+"";
					return "编号:"+idVal;
				}
			});
			//设置第二列
			DataGridColumn c2=wm.create(DataGridColumn.class);
			c2.setHeaderText("c2Text");
			c2.setDataField("c2");
			//设置表格列的自定义渲染类
			c2.setItemRenderer(new RendererType(DataGridRendererComponent.class));
			//设置第三列
			DataGridColumn c3=wm.create(DataGridColumn.class);
			c3.setHeaderText("c3Text");
			c3.setDataField("c3");
			dataGrid.setColumns(new Object[]{c1,c2,c3});
			//添加事件
			dataGrid.addCreationCompleteListener(new FlexEventListenerAdapter(){
				@Override
				public void creationComplete(FlexEvent e) {
					   DataGrid grid=(DataGrid)e.getCurrentTarget();
					   System.out.println(grid+"创建完毕...");
				}
			});
			//添加表格列选择事件
			dataGrid.addChangeListener(new ListEventListenerAdapter(){
				public void change(ListEvent e) {
					 System.out.println(e);
				}
			});

 

 

  加载外部API:

 

        //首先获得样式管理器

		SuperWidget  styleManager=app.getStyleManager();
		//获得外部API的样式文件,这里的样式文件已经编译为swf了,在flex开发中他们是css文件
		final String path=Environment.getLocation()+"/map/styles.swf";
		//调用样式管理器对象的loadStyleDeclarations2方法加载样式,并返回evtDispatch加载事件对象
		SuperWidget  evtDispatch=(SuperWidget)wm.
		callFunction(styleManager.id, "loadStyleDeclarations2", new Object[]{path,true,ApplicationDomain.getCurrentDomain(wm)});
		//样式文件加载过程中的事件监听器对象
		StyleEventListenerAdapter listener=new StyleEventListenerAdapter(){
			public void error(StyleEvent e) {
				System.out.println("样式文件"+path+" 加载出错");
			}
			public void complete(StyleEvent e) {
				System.out.println("样式文件"+path+" 加载完毕");
				//加载外部API中所有类型定义所在的swf,在java中这里就像是加载某个jar库文件
				String url=Environment.getLocation()+"/map/ESRI_API.swf";
			  	SuperWidget moduleInfo=(SuperWidget)ModuleManager.getModule(wm, url);
			  	moduleInfo.addListener(ModuleEvent.READY, new ModuleEventListenerAdapter(){
			    	 @Override
			    	public void ready(ModuleEvent e) {
			    		   //API加载完毕后调用对应的API显示地图
			    		   SuperWidget map=wm.create("com.esri.ags.Map");//创建map地图对象
			    		   SuperWidget layer=wm.create("com.esri.ags.layers.ArcGISTiledMapServiceLayer");//创建一个地图图层
			    		   wm.setProp(layer.id,"url","http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" );
			    		   wm.callFunction(map.id, "addLayer",new Object[]{layer});//添加图层
			    		   //将map地图控件添加到app中显示出来
			    		   wm.addChild(app.id, map.id);
			    	}
			    	public void error(ModuleEvent e) {
			    		System.out.println("模块加载错误");
			    	}
			    });
			   //加载模块
			   wm.callFunction(moduleInfo.id, "load", 
					   new Object[]{ApplicationDomain.getCurrentDomain(wm)});
			   
			}
		};
		//添加加载完毕监听器
		evtDispatch.addListener(StyleEvent.COMPLETE, listener );
		//添加加载错误监听器
		evtDispatch.addListener(StyleEvent.ERROR, listener);

 

 

    其实InvokeUI的实现原理与swt非常相似,要想知道完整代码请查看附件。

 

     ps:InvokeUI的下一步开发计划包括:

               1.继续稳定与完善InvokeUI核心库

               2.实现用xml构建界面与IDE界面设计器


     InvokeUI承诺完全免费使用,目前正处在功能完善阶段,欢迎大家多提宝贵意见

R语言机器学习算法实战系列(四)随机森林算法分类器+SHAP值 (Random Forest) 本文介绍了如何使用R语言实现随机森林算法,用于构建乳腺癌分类器。随机森林通过多棵决策树投票判断标签,具有避免偏差和提升模型效果的优势。文章详细讲解了数据下载、R包加载、数据预处理、特征选择、模型构建与评估等步骤。数据集包含569份恶性和良性肿瘤样本的32类指标,通过随机森林模型进行特征选择和分类。最终,文章提供了完整的代码和可视化结果,帮助读者理解并实现随机森林算法。 阅读详情

相关推荐

【v4l2】在Android SDK中交叉编译v4l2-ctl

为调试Android设备中camera的相关功能,需要引入v4l2-ctl工具。由于厂商提供的Android SDK源码中未集成v4l2-utils(包含v4l2-ctl以及其它组件的工具包),故需要下载v4l2-utils源码,并在Android SDK中交叉编译生成v4l2-ctl可执行文件。本文讲述其过程步骤。

rentong123的博客 1324

前端UI框架汇总

本文整理了一些比较流行的前端UI框架,排名不分先后,仅供参考。可按照项目需求自行考虑。 1、bootstrap Bootstrap 是Twitter推出的一个用于前端开发的,一个用于 HTML、CSS 和 JS 开发的开源工具包,是全球最受欢迎的前端组件库,用于开发响应式布局、移动设备优先的 WEB 项目。 官网:https://v4.bootcss.com/ 文档:https://v4....

缘如风的博客 7万+

夏令营纪实——东南大学计科院&PALM实验室面试全解析

本文详细解析了东南大学计科院与PALM实验室夏令营的面试全流程,包括前期准备、技术考察、项目经验深挖等关键环节。特别针对自然语言处理(NLP)和机器学习(ML)领域的高频问题提供应对策略,帮助申请者提升面试表现。文章还分享了实用的准备技巧和面试经验,为有意向参加该夏令营的学生提供宝贵参考。

convnet3designer的博客 459

最受欢迎的前端几大UI框架

在前端项目开发过程中,总是会引入一些UI框架,已为方便自己的使用,很多大公司都有自己的一套UI框架,下面就是最近经常使用并且很流行的UI框架。 一.Mint UI 屏幕快照 2019-01-18 下午3.03.59.png Mint UI是 饿了么团队开发基于vue .js的移动端UI框架,它包含丰富的 CSS 和 JS 组件,能够满足日常的移动端开发需要。 官网:https://...

前端视听 7632

Quartus ||———基于Verilog HDL的数字秒表设计实验

Quartus ||———基于Verilog HDL的数字秒表设计实验一、实验目的二、实验步骤(一)新建工程(二)添加设计文件(三)综合分析与功能仿真1、综合分析2、功能仿真 一、实验目的 用Verilog HDL设计一个数字跑表,所需引脚和功能如下: 二、实验步骤 (一)新建工程 在创建好工程名称后,选定芯片类型 (二)添加设计文件 新建Verilog文件,键入代码如下 module n_clk_top( input clk, input rese

TBMmagic的博客 5526

全局特征描述子 CVFH (Clustered Viewpoint Feature Histogram) 原理

特性VFHCVFH处理对象整个物体点云物体点云被分割后的稳定表面块(簇)对遮挡的鲁棒性弱。遮挡会破坏全局形状,导致描述子失效。极强。只依赖于稳定存在的部分。描述子维度263 维308 维 (263 + 45 SC)输出数量一个物体产生1 个描述子一个物体可能产生多个签名计算复杂度相对较低较高(需先聚类)主要应用场景完整、分割良好的物体存在遮挡、背景杂波的不完整物体。

weixin_37079656的博客 619

UI框架是什么

UI框架(User Interface Framework)是一种提供UI开发者预先定义好的组件、模板、样式和功能的软件工具包。UI框架可以帮助开发者快速创建可重用的UI组件和页面并提供良好的用户体验。UI框架可以包含布局、样式、主题、图标、字体和JavaScript插件等。常用的UI框架有Bootstrap、Material UI、Ant Design等。UI框架使得开发者能够更快速地创建出高品质、好看的UI界面。

SYC20110120的博客 1199

基于学术研究风云卫星数据下载教程

目录 一、相关网址 1.登录注册网址:国家卫星气象中心 2.风云数据服务客户端下载网址 3.风云卫星遥感数据服务网址 二、下载数据步骤 1.首先在注册登录网址,注册一个账户 2.待账户审核后,登录账户即可搜索并下载数据 三、相关工具下载 1.登录风云卫星遥感数据服务网址 2.NCSA HDFView软件 3.风云卫星数据(L1)处理软件包(FENGYUN Toolkit v1.1) 4.静止卫星云图分区图显示软件(SECView) 5.风云二号静止气象卫星数据及产品处理..

珞瑜的博客 1万+

前端基础5——UI框架Layui

Layui的常用设置

百慕卿君博客 1万+

C#中通过Mapster实现轻量级高效对象映射器:从零到精通

本文介绍了.NET生态中高性能对象映射库Mapster的完整使用指南。从基础安装(通过NuGet包)到快速入门示例,展示了如何实现简单对象映射。进一步讲解了自定义映射规则、命名不一致属性的处理方式,以及如何在ASP.NET Core中集成Mapster服务。针对复杂场景,详细解析了嵌套对象映射的配置技巧,并提供了性能优化方案(如预编译映射器)和调试技巧(启用调试模式、捕获映射异常)。通过完整的代码实践,帮助开发者高效解决从基础到高级的对象映射需求。

墨夶的博客 742

AIPex:AI + 自然语言驱动的浏览器自动化扩展

AIPex是一款革命性的Chrome扩展,通过AI技术实现自然语言驱动的浏览器自动化。它支持30多种自动化工具,包括智能标签页管理(分组、切换、批量操作)、页面内容提取(文本、链接、元数据)、交互元素操作(点击、滚动)以及表单智能填写等功能。用户只需用自然语言下达指令,即可快速完成复杂的浏览器操作,大幅提升工作效率。AIPex特别适合需要处理大量重复性网页操作的用户,如数据分析师、产品经理等。

blues_C的博客 1127

paip.java桌面开发应用与WEB RIA应用

paip.java桌面开发应用与WEB RIA应用     SWT. 1 Java桌面程序开发框架 InvokeUI1 JDIC组件... 2 JAVAFX.. 2   SWT 都知道的东东   Java桌面程序开发框架 InvokeUI     InvokeUI是一个Java桌面程序开发框架。    它将Flex界面API进行Java本地封装,以实现用Jav

attilax的专栏 2467

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java 封装swing的桌面程序invokeui

[url]http://www.iteye.com/topic/1111880[/url]

824

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java内部开发框架

新job:架构一个Java版的内部开发框架,旨在消除重复工作,提高开发效率; 以下是一些资料,整理一下备查; 《概念设计》 《需求说明书》 《技术选型》 《功能列表》 《技术实现功能列表》 《基础开发框架类图》 《基础测试框架类图》 《开发文档》 转载于:https://www.cnblogs.com/AllenI...

weixin_30752699的博客 105

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

几款学习成本低的优雅前端框架推荐(不分先后)

1.Amazeui Amaze UI 是一个轻量级、 Mobile first 的前端框架, 基于开源社区流行前端框架编写的。 官网地址:http://amazeui.org/ 2.uiKit uiKit是一款轻量级、模块化的前端框架,可快速构建强大的web前端界面。 官网地址:http://www.getuikit.net/ 3.H-ui H-ui是轻量级前端框架,简单免...

aiqianqi1796的博客 1050

8个优秀的前端UI框架

一.Mint UI 官网:https://mint-ui.github.io/#!/zh-cn Github: https://github.com/ElemeFE/mint-ui/ 由饿了么前端团队推出的 Mint UI 是一个基于 Vue.js 的移动端组件库。 二.WeUI 官网地址:https://weui.io/ Github: https://github.com/weui/weui.git WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微..

YuZongTao 6211

当前流行的UI框架

最流行的UI框架 1.Bootstrap:用于开发响应式布局、移动优先的Web项目。可以快速上手,几乎没什么学习成本,是一个入门级的UI框架。 2.AmazeUI:妹子UI,它也是一个移动优先的UI框架,主要能解决国内浏览器存在的跨屏适配和兼容性问题。 3.Uni-app:是一个使用Vue.js开发的所有前端应用的UI框架,开发一套代码,可发布到IOS、Android、H5和微信小程序、快应用等多个平台。 4.ElementUI:是由饿了么前端开发团队开源的UI框架,主要用于...

weixin_52120405的博客 7187

2021前端几大UI主流框架排行榜

在前端项目开发过程中,总是会引入一些UI框架,已为方便自己的使用,很多大公司都有自己的一套UI框架,下面就是最近经常使用并且很流行的UI框架。 一.layui 流行指数:★★★★★★★ layui是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用。其外在极简,却又不失饱满的内在,体积轻盈,组件丰盈,从核心代码到 API 的每一处细节都经过精心雕琢,非常适合界面的快速开发。 官网地址:https://www.layui.com Github:

zuo_kaizheng的博客 2万+

当前流行前端几大UI框架(PC和移动端)

写在前面: 最近着手写一个关于社区服务医院的小项目,对于前端展示页面的框架,在网上查找一番找到了当前较为流行的几个框架。其中也有包含微信端的框架。 PC端框架及其链接如下: 1.Bootstrap 官网地址:https://www.bootcss.com/ 2.Layui 官网地址:https://www.layui.com/ Github:https://git...

qq_41172982的博客 2万+

UI架构解说

是指用户与软件或硬件系统进行交互的界面。它是用户与系统之间的桥梁,允许用户通过视觉元素、交互组件和反馈机制来操作和控制应用程序或设备。UI 设计的目标是提供直观、易用和愉悦的用户体验(UX,User Experience)。

owolai的博客 2206

【Vue】Vue与UI框架(Element Plus、Ant Design Vue、Vant)

Vue生态系统中有多个优秀的UI组件库,帮助开发者快速构建美观、一致且功能丰富的用户界面。:基于Vue 3的桌面端组件库,适用于中后台系统:阿里巴巴推出的企业级UI组件库,基于Ant Design设计规范Vant:有赞前端团队开源的移动端组件库,专注于移动应用开发// Vue UI框架流行度数据模拟"其他": 8基于项目需求选择中后台管理系统 → Element Plus 或 Ant Design Vue移动端应用 → Vant设计风格要求高 → Ant Design Vue。

Guiat的博客 3790

Vue进阶(贰佰):前端UI框架介绍

目前流行前端几大UI框架 2019-01-28阅读 8100 在前端项目开发过程中,总是会引入一些UI框架,已为方便自己的使用,很多大公司都有自己的一套UI框架,下面就是最近经常使用并且很流行的UI框架。 一. ElementUI Element是饿了么前端开源维护的Vue UI组件库,组件齐全,基本涵盖后台所需的所有组件,文档讲解详细,示例丰富。 主要用于开发PC端的页面,是一个质量比较高的Vue UI组件库。 官网地址 Github 二.iView UI iview ui是一个强大的基于vue的ui

IT全栈 华强工作室 9592

推荐几个精致的web UI框架及常用前端UI框架

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!点击【学习资料】即可领取!点击【学习资料】即可领取![外链图片转存中…(img-Yr527LGy-1712761938441)][外链图片转存中…(img-DG0DwGAM-1712761938442)]

2401_84097941的博客 5227

2024年前端流行的UI库框架

UI框架

snow 4844

推荐几个精致的web UI框架及常用前端UI框架,已拿offer附真题解析

整理面试题,不是让大家去只刷面试题,而是熟悉目前实际面试中常见的考察方式和知识点,做到心中有数,也可以用来自查及完善知识体系。《前端基础面试题》,《前端校招面试题精编解析大全》,《前端面试题宝典》,《前端面试题:常用算法》PDF完整版点击这里免费领取[外链图片转存中…(img-ykbcS3kb-1712367088794)][外链图片转存中…(img-t336d2wZ-1712367088794)][外链图片转存中…(img-9BRmZmld-1712367088794)]

2401_84093490的博客 3760

前端UI框架汇总,零基础入门到精通,收藏这篇就够了

本文整理了一些比较流行的前端UI框架,排名不分先后,仅供参考。可按照项目需求自行考虑。

Javachichi的博客 1315
上一篇: 关于smartinvoke开发工具的操作
smartinvoke
博客等级 码龄17年 4粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值