我正在尝试了解 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,这是预期的:
我正在尝试使用以下代码重新创建相同的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);
}
}
我需要在课程WithoutBxml
中更改哪些内容才能获得与BXML文件相同的结果?
答案 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>
。