X-Meta引擎是使用Java编写的,执行模型最终执行的是Java程序,通过JavaAction可以调用Java程序,JavaAtion就是模型和Java之间的桥梁。
另外对于性能有要求的动作模型,建议使用JavaAction。
建议在自己的Java项目中编写代码。除此之外也可以直接在JavaAction模型里编写Java代码等。
只有一个固定ActionContext参数的Java静态方法可以被调用。调用该方法时不会实例化方法所属的类的实例。
执行非静态的Java方法时会实例化对象,此时可以使用注解。如下面的示例。
package xworker.ide;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.xmeta.ActionContext;
import org.xmeta.Thing;
import org.xmeta.World;
import org.xmeta.annotation.ActionClass;
import org.xmeta.annotation.ActionField;
import org.xmeta.annotation.ActionParams;
@ActionClass(creator="newInstance")
public class TestJavaActionAnnotation {
@ActionField(name="shell")
Shell shellAbc;
@ActionField
Browser browser;
@ActionParams(names="urlText")
public void urlTextSelection(Text urlText, ActionContext actionContext) {
browser.setUrl(urlText.getText());
}
public void okSelection(ActionContext actionContext) {
System.out.println("okButton session ");
}
public void cancelSelection() {
System.out.println("cancelButton session ");
shellAbc.dispose();
}
public static Object newInstance(ActionContext actionContext) {
return new TestJavaActionAnnotation();
}
public static void main(String[] args) {
try {
World world = World.getInstance();
world.init("./xworker/");
Thing thing = World.getInstance().getThing("_local.test.core.actions.javaaction.TestAnnotation");
thing.doAction("run");
}catch(Exception e) {
e.printStackTrace();
}
}
}
测试模型的代码。
<?xml version="1.0" encoding="utf-8"?>
<Shell name="shell" descriptors="xworker.swt.widgets.Shell" text="测试Annotation" width="800"
height="600" label="TestAnnotation">
<GridLayout name="shellGridLayout"></GridLayout>
<Text name="urlText" BORDER="true">
<GridData name="GridData" style="FILL_HORIZONTAL"></GridData>
<Listeners>
<Listener type="DefaultSelection">
<JavaAction name="okSelection" outerClassName="xworker.ide.TestJavaActionAnnotation"
methodName="urlTextSelection"></JavaAction>
</Listener>
</Listeners>
</Text>
<Browser name="browser" _xmeta_id_="browsre">
<GridData name="browserGridData" style="FILL_BOTH"></GridData>
</Browser>
<Composite name="buttonComposite" _xmeta_id_="1264">
<GridData name="buttonCompositeGridData" _xmeta_id_="1265" style="FILL_HORIZONTAL"
horizontalAlignment="END"></GridData>
<RowLayout name="buttonCompositeRowLayout" _xmeta_id_="1266"></RowLayout>
<Button name="okButton" _xmeta_id_="1267" text="Ok">
<RowData name="RowData" _xmeta_id_="1268" width="80"></RowData>
<Listeners _xmeta_id_="1269">
<Listener name="okButtonSelection" _xmeta_id_="1270">
<JavaAction name="okSelection" outerClassName="xworker.ide.TestJavaActionAnnotation"
methodName="okSelection"></JavaAction>
</Listener>
</Listeners>
</Button>
<Button name="cancelButton" _xmeta_id_="1271" text="Cancel">
<RowData name="RowData" _xmeta_id_="1272" width="80"></RowData>
<Listeners _xmeta_id_="1273">
<Listener name="cancelButtonSelection" _xmeta_id_="1274">
<JavaAction name="okSelection" outerClassName="xworker.ide.TestJavaActionAnnotation"
methodName="cancelSelection"></JavaAction>
</Listener>
</Listeners>
</Button>
</Composite>
</Shell>
Copyright © 2007-2014 XWorker.org 版权所有