BXML的等效Java代码

时间:2013-04-24 14:19:24

标签: java apache-pivot

我正在尝试了解 Apache Pivot 如何根据 BXML 文件中的定义构建GUI。我想确保我了解涉及哪些步骤以及在这些步骤中自动完成的步骤。为此,我尝试将非常简单的GUI的BXML定义转换为纯Java。但是,当遵循BXML Primer中描述的步骤时,布局似乎不会以相同的方式(或根本不是)完成。

这是加载文件的BXML文件和附带的类:

example.bxml

<?xml version="1.0" encoding="UTF-8"?>

<Frame xmlns="org.apache.pivot.wtk">
    <TextArea text="Hello World" />
</Frame>

WithBxml.java

public final class WithBxml extends Application.Adapter {
    @Override
    public void startup(Display display, Map<String, String> properties) throws Exception {
        Frame frame = (Frame) new BXMLSerializer().readObject(WithBxml.class, "example.bxml");

        frame.open(display);
    }

    public static void main(String[] args) {
        DesktopApplicationContext.main(WithBxml.class, args);
    }
}

这将创建以下GUI,这是预期的:

enter image description here

我正在尝试使用以下代码重新创建相同的GUI。但TextArea不可见,如下面的屏幕截图所示。

WithoutBxml.java

public final class WithoutBxml extends Application.Adapter {
    @Override
    public void startup(Display display, Map<String, String> properties) throws Exception {
        TextArea textArea = new TextArea();
        textArea.setText("Hello World");

        Frame frame = new Frame();
        frame.add(textArea);
        frame.open(display);
    }

    public static void main(String[] args) {
        DesktopApplicationContext.main(WithoutBxml.class, args);
    }
}

enter image description here

我需要在课程WithoutBxml中更改哪些内容才能获得与BXML文件相同的结果?

1 个答案:

答案 0 :(得分:0)

我必须使用frame.add(textArea);frame.setContent(textArea);添加到TextArea,而不是调用Frame。加载BXML文件时会调用此方法,因为Window类使用@DefaultProperty("content")注释:

@DefaultProperty("content")
public class Window extends Container {
    ...
}

因此,BXMLSerializer正在为{BXML文件中setContent()元素的子元素调用<Window>