本專案(由官網取得)可分成二個部份來說明,首先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