首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Java 图形用户界面设计(1)

Java 图形用户界面设计(1)

前言随着 Internet 的飞速发展,Java 技术也得到了越来越广泛的应用。而无论我们是采用 J2SE、J2EE 还是 J2ME,GUI 都是不能回避的问题。现在的应用软件越来越要求界面友好、功能强大而又使用简单。而众所周知,在 Java 中进行 GUI 设计相对于其跨平台、多线程等特性的实现要复杂和麻烦许多。这也是很多 Java 程序员抱怨的事情。但 GUI 已经成为程序发展的方向,所以我们也必须了解 Java 的 GUI 设计方法和特点。其实,采用 Java 提供的布局管理器接口和相应的布局管理类,我们也可以做出相当漂亮的界面来,当然实现起来肯定要比 VB 麻烦许多。本文试图通过自己的开发经历介绍一些具体的应用实例,希望能给那些曾经象我一样苦闷的 Java 痴迷者一些帮助。
Java 中的布局管理器2.1 为什么要使用布局在实际编程中,我们每设计一个窗体,都要往其中添加若干组件。为了管理好这些组件的布局,我们就需要使用布局管理器。比如说,设计一个简单的计算器,或一个文本编辑器等等。这些组件是让 JVM 自己任意安排呢?还是按照一定的位置关系进行规范的安排呢?当然应该选择后者。将加入到容器的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。在 Java 中,布局由布局管理器 (LayoutManager) 来管理。那么,我们在什么时候应该使用布局管理器?应选择哪种布局管理器?又该怎样使用布局管理器呢?
如果你写的是 GUI 程序,在使用 AWT/Swing 组件时就不应硬性设置组件的大小和位置,而应该使用 Java 的布局管理器(LayoutManager)来设置和管理可视组件的大小和位置,否则就有可能造成布局混乱。不信,你可以新建一个 Frame(或 JFrame),通过 setBounds() 方法往其中添加几个 Button(或 JButton),一旦你将窗体拉大或缩小时,你会发现组件的排列完全不是按你所预想的那样。为了解决这个问题,即当窗体(或容器)缩放时,组件位置也随之合理调整,我们就需要使用布局管理器。
为此,我们首先要知道 Java 的布局方式,Java 提供的 API 中有些什么布局管理器,它们的布局特点是什么。
2.2 Java 的布局方式我们都知道,Java 的 GUI 界面定义是由 AWT 类包和 Swing 类包来完成的。它在布局管理上采用了容器和布局管理分离的方案。也就是说,容器只管将其他组件放入其中,而不管这些组件是如何放置的。对于布局的管理交给专门的布局管理器类(LayoutManager)来完成。
现在我们来看 Java 中布局管理器的具体实现。我们前面说过,Java 中的容器类(Container),它们只管加入组件(Component),也就是说,它只使用自己的 add() 方法向自己内部加入组件。同时他记录这些加入其内部的组件的个数,可以通过 container.getComponentCount() 方法类获得组件的数目,通过 container.getComponent(i) 来获得相应组件的句柄。然后 LayoutManager 类就可以通过这些信息来实际布局其中的组件了。
Java 已经为我们提供了几个常用的布局管理器类,例如: FlowLayout、BorderLayout、GridLayout、GridBagLayout 等。下面列表说明它们的布局特点:
包类特点java.awtCardLayout将组件象卡片一样放置在容器中,在某一时刻只有一个组件可见java.awtFlowLayout将组件按从左到右而后从上到下的顺序依次排列,一行不能放完则折到下一行继续放置java.awtGridLayout形似一个无框线的表格,每个单元格中放一个组件java.awtBorderLayout将组件按东、南、西、北、中五个区域放置,每个方向最多只能放置一个组件java.awtGridBagLayout非常灵活,可指定组件放置的具体位置及占用单元格数目Javax.swingBoxLayout就像整齐放置的一行或者一列盒子,每个盒子中一个组件Javax.swingSpringLayout根据一组约束条件放置子组件Javax.swingScrollPaneLayout专用于 JScrollPane,含一个 Viewport,一个行头、一个列头、两个滚动条和四个角组件Javax.swingOverlayLayout以彼此覆盖的形式叠置组件Javax.swingViewportLayoutJViewport 的默认布局管理器
事实上,在大多数情况下,综合运用好这些布局管理器已可以满足需要。当然对于特殊的具体应用,我们可以通过实现 LayoutManager 或 LayoutManager2 接口来定义自己的布局管理器。下面我们通过几个实例来了解几个常用的布局管理器的使用方法。
返回列表