0

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

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

示例.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,这是预期的:

在此处输入图像描述

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

没有 Bxml.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);
    }
}

在此处输入图像描述

我需要在类中进行哪些更改WithoutBxml才能获得与 BXML 文件相同的结果?

4

1 回答 1

0

而不是调用frame.add(textArea);,我不得不使用frame.setContent(textArea);添加TextAreaFrame. 加载 BXML 文件时会调用此方法,因为Window该类使用以下注释@DefaultProperty("content")

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

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

于 2013-04-24T15:06:17.393 回答