第四节 ApplicationWindow类
本章中的HelloWorld程序继承了ApplicationWindow类。ApplicationWindow正如它的名字一样,表示了一个窗口应用程序。它有一个父亲Shell,是从构造函数传进去的:
ApplicationWindow(Shell parentShell)
如果parentShell是null,这个ApplicationWindow就代表一个顶层窗口,否则它就是parentShell的一个孩子。它包含了对菜单栏、工具条、CoolBar以及状态栏的支持。
当你构造一个ApplicationWindow的时候,除了构造它本身以外没有什么事情会发生。当你调用它的open()方法的时候,会开始很多工作,并且最有趣的事情发生在当父亲Shell为null的时候。在这种情况下,父亲Shell被创建,然后configureShell()被调用。ApplicationWindow中的configureShell实现依次做以下事情:
- 设置默认图像
- 设置一个GridLayout
- 如果菜单栏被设置了,就创建一个菜单
- 将布局变为ApplicationWindowLayout
- 如果工具栏被设置了,就创建一个工具栏
- 如果CoolBar被设置了,就创建一个CoolBar
- 如果状态栏被设置了,就创建一个状态栏
- 你可以重载configureShell()以改变默认的行为。
接下来,这个ApplicationWindow会被按需要改变尺寸,以使得它不会超出屏幕大小。接着它被打开,如果它被设置为阻塞模式——也就是说,setBlockOnOpen(true)曾被调用——它将进入事件循环,直到被关掉为止。
在程序中使用ApplicationWindow,通常创建一个包含应用程序相关代码的子类继承它。许多ApplicationWindow的方法,以及它的父类Window的方法,都是protected的。你可以从继承的类中调用它们,也可以重载它们。比如,你为了给应用程序加一个菜单栏,可以在父亲Shell被创建之前调用protected的方法addMenuBar()——通常是在构造函数中。这个方法继而会调用protected的方法createMenuManager(),你可以重载它以创建适合这个程序的菜单。第十六章包含了关于创建菜单栏、工具条、CoolBar以及状态栏的更多信息。