软件开发

当前位置:首页 > 软件开发

《Java核心技术高级特性》(第六章)(续)

6.6.3桌面面板和内部框体

很多应用会将信息在多个窗口中显示,并且这些窗口都包含在一-个大的框体中。如果将应用框体最小化,那么它当中的所有窗口会在同- -时间全部隐藏起来。在Windows环境中,这种用户界面有时称作多文档界面( multiple document interface, MDI)。图6-47显示了一个使用到该界面的典型应用程序。

新梦想IT职业教育

有一段时间,这种用户界面格式非常流行,不过最近几年已经变得不那么常用了。现在,很多应用为每个文档只显示-一个独立的顶层框体。哪- -种格式更好呢? MDI 减少了窗口的混乱,但是如果拥有了独立的顶层窗口,意味着可以使用主窗口系统的按钮及热键浏览所有窗口。

在Java环境中,不能完全依赖于主机窗口系统提供的功能,让你的应用管理它自己的框体还是很有必要的。

图6-48显示了一个具有三个内部框体的Java应用程序,其中的两个有一些边框装饰,用于对它们进行最大化和图标显示,第三个已经处于图标状态。

在Metal外观模式中,内部框体具有独一-无二的“grabber"区域,可以让你随意移动这些框体,并可以通过拖动调整大小的角来更改窗口的大小。为了实现这项功能,请遵循下面几步:

1 )在该应用中使用常规的JFrame。

2)向该JFrame添加JDesktopP ane。

desktop = new JDesktopPane0;
add(desktop, BorderLayout.CENTER);

新梦想IT职业教育

3)构建JInternalFrame窗口,可以设定是否需要更改框体大小和关闭框体的图标。

通常情况下,需要添加所有的图标。

JInternalFrare iframe = new JInteralFrame(title,
true, / resizable
true, // closable
true, // maximizable
true); // iconifiable

4)向该内部框体中添加构件。

iframe. add(c, BorderLayout.CENTER);

5)设置该内部框体的图标。该图标会显示在框体左上角。

ifrane.setFraneIcon(icon);

口注意:在Metal外观模式的当前版本中,框体图标并不在图标化的框体中显示出来。

6)设置内部框体的大小。和常规框体-样,内部框体初始大小为0x0个像素。因为你并不希望内部框体在另- -个框体 上面重叠地显示出来,因此,应该为下一个框体使用一个变量位置。使用reshape方法对框体的位置和大小进行设置:

iframe. reshape(nextFramex, nextFramey, width, height);

7)和JFrames一样,需要将该框体设为可见的。

iframe. setisible(true);

口注意:在Swing的早期版本,内部框体自动是可见的,因此就不需要调用这个方法了。

8)将该框体添加到JDesktopPane中:

destopadd(iframe);

9)你可能想使新的框体成为选定框体。对于桌面上的内部框体,只有选定的框体才能接收键盘焦点。在Metal外观模式中,选定框体具有蓝色标题栏,相反地,其他框体是灰色标题栏。可以使用setSelected方法选定一个框体。 不过,这种“选定”属性可能会被否决掉,当前选定的框体可以拒绝放弃焦点。在这种情况下,setSelected 方法会抛出一一个PropertyVetoExcepti on异常让你处理。

try
ifrane. setSelected(true);
catch (ropertVetoException ex)
/1 attenpt was vetoed

10)你可能希望下一个内部框体的位置能够向下移动,使得不至于覆盖已经存在的框体。框体之间的合适距离是标题栏的高度,可以通过下面的方式获得。

int franeDistance■ifrane.getHeightO - iframe.getContentPaneO getHeightO

11 )使用该距离确定下-个内部框体的位置。

nextFrameX += franeDistance;
nextFraneY扫franeDistance;
if (nextFrameX + width > desktop.gtidth0O)
nextFraneX = 0;
if (nextFrameY ↓height > desktop. getHeightO)
nextFrameY0;

6.6.4级联与平铺

在Windows环境中,有一些用于级联及平铺窗口的标准命令(参见图6-49及图6-50)。Java语言的JDesktopP ane类和JInternalFrame类对这些操作未提供任何内置支持。在程序清单6-31中,我们将展示如何实现这些操作。

新梦想IT职业教育

新梦想IT职业教育


相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~