基于之前讨论的帖子,做了一个演示。大家看看如何?
本程序是个安装程序,里面包含了OSGi运行环境、SWT相关Bundles和一个演示文件 test.xmla,安装之后它会自动创建到桌面上,不过有个问题就是,在某些中文环境下,如果路径包含中文可能会找不到文件,例如:
理想情况
C:\Documents and Settings\Administrator\桌面\test.xmla
实际情况
C:\Documents and Settings\Administrator\×???\test.xmla
尝试转换了字符编码也不好用,目前尚不清楚如何解决。折中的解决办法就是把 test.xmla 文件放到不包含中文路径的目录下。此演示程序需要Java运行环境1.6及以上版本。
演示文件中包含了:
1. SWT部件生成,演示namespace和bundles关联。
2. SWT布局处理,演示不同的bundles之间通过namespace可以互相处理对方的对象。
3. SWT事件处理,演示可以通过fragment bundle来注入事件,并在XML中使用(TestEvent)。
4. 脚本事件处理,演示直接在XML中编写脚本以处理SWT部件所产生的事件。
<?xml version="1.0" encoding="utf-8"?> <Shell xmlns="com.cmspad.xmla.swt" xmlns:t="com.cmspad.osgi" xmlns:l="com.cmspad.xmla.swt.layout" xmlns:e="com.cmspad.xmla.swt.event" t:id="hello" text="XML Application" style="DIALOG_TRIM,MAX,MIN" size="300,200" l:layout="grid" l:numColumns="3" defaultButton="aButton"> <!-- 载入 com.cmspad.xmla.swt.events.TestEvent 事件 --> <e:event e:class="TestEvent"/> <button text="Button 1"/> <!-- 触发 TestEvent.buttonSelection 方法 --> <button text="Button 2" e:selection="buttonSelection"/> <button t:id="aButton" text="Button 3" l:horizontalAlignment="FILL" l:grabExcessHorizontalSpace="yes"/> <button text="Button 4" e:selection="hello.text='Button 4 clicked';"/> <!-- 调用下方脚本中的 f 函数 --> <button e:Selection="f">Button 5</button> <button text="Button 6" l:horizontalAlignment="FILL" l:grabExcessHorizontalSpace="yes"/> <t:script> function f(e){ var kakakaka = 'HOHO'; hello.text = "Function invoked:" + kakakaka; } </t:script> </Shell>
20090927: 默认的 main(String[] args) 参数是通过ISO-8859-1编码的,所以在传递中文名称时会出现乱码,经过改进,删除线部分的问题已经解决,附件已重新上传。