3.6.1.3.1. AbstractFrame

这是旧版本的 API。对于从 7.0 开始的新 API,请参阅 界面控制器

AbstractFrame 是控制器类结构的根节点基类。以下是其主要方法的介绍:

  • init() 在创建了 XML 描述中的所有组件之后,但是在界面显示之前会被调用。

    init() 接受一组以 map 类型传递的参数,可以用在控制器里面。这些参数可以通过调用界面的方法传递(使用 openWindow(), openLookup() 或者 openEditor() 方法),或者在界面注册文件 screens.xml 里面定义。

    如果需要初始化界面组件,必须实现 init() 方法,示例:

    1. @Inject
    2. private Table someTable;
    3. @Override
    4. public void init(Map<String, Object> params) {
    5. someTable.addGeneratedColumn("someColumn", new Table.ColumnGenerator<Colour>() {
    6. @Override
    7. public Component generateCell(Colour entity) {
    8. ...
    9. }
    10. });
    11. }
  • getMessage(), formatMessage() – 用来从语言包获取本地化翻译消息的方法,在 XML 描述中定义,是调用相应消息接口的捷径。
  • openFrame() – 根据在 screens.xml 文件中注册的标识符加载一个子界面框架。如果调用者给这个方法传递了一个容器组件的参数,子界面框架会在这个容器内打开。此方法返回子框架控制器。示例:

    1. @Inject
    2. private BoxLayout container;
    3. @Override
    4. public void init(Map<String, Object> params) {
    5. SomeFrame frame = openFrame(container, "someFrame");
    6. frame.setHeight("100%");
    7. frame.someInitMethod();
    8. }

    但这并不是说非要在 openFrame() 方法中带入容器参数,其实也可以先加载子界面框架然后再添加到所需的容器中:

    1. @Inject
    2. private BoxLayout container;
    3. @Override
    4. public void init(Map<String, Object> params) {
    5. SomeFrame frame = openFrame(null, "someFrame");
    6. frame.setHeight("100%");
    7. frame.someInitMethod();
    8. container.add(frame);
    9. }
  • openWindow(), openLookup(), openEditor() – 分别用来打开简单界面、查找界面、以及编辑界面。方法会返回这些界面的控制器。

    对于对话框模式,openWindow() 方法可以带参数调用,示例:

    1. @Override
    2. public void actionPerform(Component component) {
    3. openWindow("sec$User.browse", WindowManager.OpenType.DIALOG.width(800).height(300).closeable(true).resizable(true).modal(false));
    4. }

    这些参数只有在不与窗口更高优先级的参数冲突的时候才会生效。这些高优先级的参数可以通过界面控制器的 getDialogOptions() 方法设置,或者在界面的 XML 描述中定义:

    1. <dialogMode forceDialog="true" width="300" height="200" closeable="true" modal="true" closeOnClickOutside="true"/>

    如果需要在界面关闭之后做一些操作,可以添加 CloseListener,示例:

    1. CustomerEdit editor = openEditor("sales$Customer.edit", customer, WindowManager.OpenType.THIS_TAB);
    2. editor.addCloseListener((String actionId) -> {
    3. // do something
    4. });

    只有在打开的窗口通过 Window.COMMIT_ACTION_ID 名称的操作(比如 OK 按钮)关闭的时候才需要使用 CloseWithCommitListener 来处理关闭事件:

    1. CustomerEdit editor = openEditor("sales$Customer.edit", customer, WindowManager.OpenType.THIS_TAB);
    2. editor.addCloseWithCommitListener(() -> {
    3. // do something
    4. });
  • showMessageDialog() – 显示消息对话框。
  • showOptionDialog() – 显示带消息的对话框,并且为用户提供一些功能操作。操作通过 Action 的数组定义,这些操作会作为按钮显示。

    推荐使用 DialogAction 对象来显示标准按钮,比如 OKCancel 或者其它按钮,示例:

    1. showOptionDialog("PLease confirm", "Are you sure?",
    2. MessageType.CONFIRMATION,
    3. new Action[] {
    4. new DialogAction(DialogAction.Type.YES) {
    5. @Override
    6. public void actionPerform(Component component) {
    7. // do something
    8. }
    9. },
    10. new DialogAction(DialogAction.Type.NO)
    11. });
  • showNotification() – 显示弹出消息。
  • showWebPage() – 在浏览器打开特定网页。

API

formatMessage() - getMessage() - init() - openFrame() - openEditor() - openLookup() - openWindow() - showMessageDialog() - showNotification() - showOptionDialog() - showWebPage()