Java学习day081 Swing用户界面组件(六:复杂的布局管理)(网格组布局、组布局、不使用布局管理器、定制布局管理器、遍历顺序)

使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识。

day081   Swing用户界面组件(六:复杂的布局管理)(网格组布局、组布局、不使用布局管理器、定制布局管理器、遍历顺序)

在前面的示例应用程序所使用的用户界面组件中,只使用了边框布局、流布局和网格布局。对于复杂的问题而言,只使用这四种布局显然不够。

Windows程序员可能会为Java对布局管理器如此兴师动众而感到奇怪。毕竟,在Windows中,布局管理不是一个太大的问题:首先,可以用对话框编辑器将组件拖放到对话柜的表面上。然后,再使用编辑器工具完成组件对齐、均衡间隔、中心定位等工作。如果正在开发的是一个大型项目,可能根本就不必担心组件如何布局,技术娴熟的用户界面设计师会完成所有这些任务。

使用这种方法布局会出现这样的问题:如果组件的大小发生改变,必须手工进行更新。为什么组件的大小会发生改变呢?通常有两种可能。第一种可能是为按钮标签和其他对话框文本选择了一种较大的字体。如果在Windows里试验一下就会发现很多应用程序没有解决好这个问题。按钮的尺寸不增大,大字体被紧缩在原来的空间里。当应用程序中的字符串翻译成其他语言时也有可能出现同样的问题,例如,“Cancel”在德语中为“Abbrechen”。如果一个按钮的大小被设计成刚好能够显示字符串“Cancel”,那么德语版显示就会出现问题了,字符串将会被剪掉一部分。

为什么Windows中的按钮不能动态地增大以适应标签呢?这是因为用户界面设计师没有给出应该在哪个方向增大的指令。每个组件拖放或排列之后,对话框编辑器只保存其像素位置和尺寸大小。至于组件为什么以这种方式排列并没有记录下来。

Java布局管理器是一种用于组件布局的好方法。应用布局管理器,布局就可以使用组件间关系的指令来完成布局操作。对于最初的AWT来说,这一点特别重要,这是因为AWT使用的是本地用户界面元素。在Motif、Windows和Macintosh中,按钮和列表框的大小各不相同,而且应用程序或applet不会预先知道它们将在哪个平台上显示。在某种程度上,可变性在Swing中就没有那么重要。如果应用程序强制使用特定的观感,如Metal观感,那么这个程序在所有平台上显示的结果都一样。但是,如果允许应用程序的用户随意地选择观感,则需要依据布局管理器的灵活性调整组件的排列了。

自从Java1.0以来,AWT就含有网格组布局(gridbaglayout),这种布局将组件按行和列排列。行和列的大小可以灵活改变,并且组件可以横跨多行多列。这种布局管理器非常灵活,但也非常复杂。仅仅提及“网格组布局”一词就会吓住一些Java程序员。

Swing设计者有一个失败的尝试:为了能够将程序员从使用网格组布局的困难中解脱出来,提出了一种被称为箱式布局(boxlayout)的布局管理器。在BoxLayout类的JDK文档中写道:“采用水平和垂直[sic]的不同组合内嵌多个面板将可以获得与GridBagLayout类似的效果,而且降低了复杂度。”然而,由于每个箱子是独立布局的,所以不能使用箱式布局排列水平和垂直方向都相邻的组件。

JavaSE1.4还做了一个尝试:设计一种代替网格组组件的布局(springlayout)。这种布

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值