本專案(由官網取得)可分成二個部份來說明,首先ui.bxml會利用到自訂的命名空間(namespace)-> myex,也因此會在專案中新增一個package名稱為myex,在myex中會建立一個類別PushButtons,它是自訂的Window類別,同時也繼承了Bindable介面,專門用來和使用者介面中的Push Button進行對應,包含了事件處理。
第二部份則是會將ui.bxml放在根目錄底下,它會引用到myex套件中所定義的自訂Window類別PushButtons。另外,程式的進入點仍是NewClass.java,此類別會讀取ui.bxml,並且經由序列化的處理將Window對應到PushButtons。
============範例展示=================================================
============範例展示=================================================
首先是myex#PushButtons.java的原始碼:
//PushButtons.java package myex; import java.net.URL; import org.apache.pivot.beans.Bindable; import org.apache.pivot.collections.Map; import org.apache.pivot.util.Resources; import org.apache.pivot.wtk.*; public class PushButtons extends Window implements Bindable { private PushButton pushButton; @Override public void initialize(Map<String, Object> namespace, URL location, Resources resources) { pushButton = (PushButton) namespace.get("pushButton"); pushButton.getButtonPressListeners().add(new ButtonPressListener() { @Override public void buttonPressed(Button button) { Alert.alert(MessageType.INFO, "你按了我一下!", PushButtons.this); } }); } }
接下來則是ui.bxml的部份。
<!--ui.bxml--> <myex:PushButtons title="Push Buttons" maximized="true" xmlns:bxml="http://pivot.apache.org/bxml" xmlns:myex="myex" xmlns="org.apache.pivot.wtk"> <Border> <BoxPane styles="{padding:4, horizontalAlignment:'center', verticalAlignment:'center'}"> <PushButton bxml:id="pushButton" buttonData="請按我!"/> </BoxPane> </Border> </myex:PushButtons>
最後則是NewClass.java的原始碼。
//NewClass.java import java.awt.Font; import org.apache.pivot.beans.BXMLSerializer; import org.apache.pivot.collections.Map; import org.apache.pivot.wtk.*; public class NewClass implements Application { private Window window = null; public static void main(String[] args) { DesktopApplicationContext.main(NewClass.class, args); } @Override public void startup(Display display, Map<String, String> properties) throws Exception { //設定佈景主題的字型,若要正常顯示中文要特別注意 Theme.getTheme().setFont(new Font("PMingLiU", Font.PLAIN, 12)); BXMLSerializer bxmlSerializer = new BXMLSerializer(); window = (Window) bxmlSerializer.readObject(NewClass.class, "ui.bxml"); window.open(display); } @Override public boolean shutdown(boolean optional) { if (window != null) { window.close(); } return false; } @Override public void suspend() { } @Override public void resume() { } }
後記:
其實也可以使用Pivot內建之annotation來自動對應ui.bxml中的bxml:id,讓程式自動取得各元件。
修改後的PushButtons.java如下:
package myex; import java.net.URL; import org.apache.pivot.beans.BXML; import org.apache.pivot.beans.Bindable; import org.apache.pivot.collections.Map; import org.apache.pivot.util.Resources; import org.apache.pivot.wtk.*; public class PushButtons extends Window implements Bindable { @BXML private PushButton pushButton = null; @Override public void initialize(Map<String, Object> namespace, URL location, Resources resources) { //pushButton = (PushButton) namespace.get("pushButton"); pushButton.getButtonPressListeners().add(new ButtonPressListener() { @Override public void buttonPressed(Button button) { Alert.alert(MessageType.INFO, "你按了我一下!", PushButtons.this); } }); } }
No comments:
Post a Comment