繁体   English   中英

BXML的等效Java代码

[英]Equivalent Java code for BXML

我试图了解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不可见,如以下屏幕截图所示。

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

在此处输入图片说明

为了获得与BXML文件相同的结果,我需要在WithoutBxml类中进行WithoutBxml更改?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM