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 版权所有