3.6.1.3.1. AbstractFrame
AbstractFrame
是控制器类结构的根节点基类。以下是其主要方法的介绍:
init()
在创建了 XML 描述中的所有组件之后,但是在界面显示之前会被调用。
init()
接受一组以 map 类型传递的参数,可以用在控制器里面。这些参数可以通过调用界面的方法传递(使用 openWindow()
, openLookup()
或者 openEditor()
方法),或者在界面注册文件 screens.xml 里面定义。
如果需要初始化界面组件,必须实现 init()
方法,示例:
@Inject
private Table someTable;
@Override
public void init(Map<String, Object> params) {
someTable.addGeneratedColumn("someColumn", new Table.ColumnGenerator<Colour>() {
@Override
public Component generateCell(Colour entity) {
...
}
});
}
openFrame()
– 根据在 screens.xml 文件中注册的标识符加载一个子界面框架。如果调用者给这个方法传递了一个容器组件的参数,子界面框架会在这个容器内打开。此方法返回子框架控制器。示例:
@Inject
private BoxLayout container;
@Override
public void init(Map<String, Object> params) {
SomeFrame frame = openFrame(container, "someFrame");
frame.setHeight("100%");
frame.someInitMethod();
}
但这并不是说非要在 openFrame()
方法中带入容器参数,其实也可以先加载子界面框架然后再添加到所需的容器中:
@Inject
private BoxLayout container;
@Override
public void init(Map<String, Object> params) {
SomeFrame frame = openFrame(null, "someFrame");
frame.setHeight("100%");
frame.someInitMethod();
container.add(frame);
}
openWindow()
,openLookup()
,openEditor()
– 分别用来打开简单界面、查找界面、以及编辑界面。方法会返回这些界面的控制器。
对于对话框模式,openWindow()
方法可以带参数调用,示例:
@Override
public void actionPerform(Component component) {
openWindow("sec$User.browse", WindowManager.OpenType.DIALOG.width(800).height(300).closeable(true).resizable(true).modal(false));
}
这些参数只有在不与窗口更高优先级的参数冲突的时候才会生效。这些高优先级的参数可以通过界面控制器的 getDialogOptions() 方法设置,或者在界面的 XML 描述中定义:
<dialogMode forceDialog="true" width="300" height="200" closeable="true" modal="true" closeOnClickOutside="true"/>
如果需要在界面关闭之后做一些操作,可以添加 CloseListener
,示例:
CustomerEdit editor = openEditor("sales$Customer.edit", customer, WindowManager.OpenType.THIS_TAB);
editor.addCloseListener((String actionId) -> {
// do something
});
只有在打开的窗口通过 Window.COMMIT_ACTION_ID
名称的操作(比如 OK 按钮)关闭的时候才需要使用 CloseWithCommitListener
来处理关闭事件:
CustomerEdit editor = openEditor("sales$Customer.edit", customer, WindowManager.OpenType.THIS_TAB);
editor.addCloseWithCommitListener(() -> {
// do something
});
showMessageDialog()
– 显示消息对话框。
showOptionDialog()
– 显示带消息的对话框,并且为用户提供一些功能操作。操作通过 Action 的数组定义,这些操作会作为按钮显示。
推荐使用 DialogAction
对象来显示标准按钮,比如 OK,Cancel 或者其它按钮,示例:
showOptionDialog("PLease confirm", "Are you sure?",
MessageType.CONFIRMATION,
new Action[] {
new DialogAction(DialogAction.Type.YES) {
@Override
public void actionPerform(Component component) {
// do something
}
},
new DialogAction(DialogAction.Type.NO)
});
showNotification()
– 显示弹出消息。
showWebPage()
– 在浏览器打开特定网页。
- API
formatMessage() - getMessage() - init() - openFrame() - openEditor() - openLookup() - openWindow() - showMessageDialog() - showNotification() - showOptionDialog() - showWebPage()