版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、主要内容主要内容 基于基于java程序的程序的gui设计工具,主要包括设计工具,主要包括 下述几个概念:下述几个概念: 组件组件-component(api) 容器容器-container 布局管理器布局管理器-layoutmanager 事件处理事件处理 主要内容主要内容 容器及布局管理容器及布局管理:解决组件在容器中的位:解决组件在容器中的位 置和大小;置和大小; 常用常用组件组件介绍:按钮、文本框、标签、列介绍:按钮、文本框、标签、列 表框、菜单等;表框、菜单等; 事件管理事件管理:如何监听和响应事件;:如何监听和响应事件; 主要内容主要内容 在在java中,开发一个中,开发一个gui程
2、序,通常需要程序,通常需要 以下几步:以下几步: (1)构建一个构建一个顶层容器顶层容器,通常是,通常是jframe或或 japplet; (2)构建若干个构建若干个组件组件,组件可以是其它容器;,组件可以是其它容器; (3)设定容器的设定容器的布局管理器布局管理器,用容器的,用容器的add()方方 法将这些组件加入到这个容器中;法将这些组件加入到这个容器中; (4)设置设置组件事件组件事件,并将组件事件与代码关联。并将组件事件与代码关联。 重点掌握的内容重点掌握的内容 从介绍容器及布局管理入手,主要掌握组件如何从介绍容器及布局管理入手,主要掌握组件如何 布置问题,重点掌握布置问题,重点掌握取
3、消布局管理的方法取消布局管理的方法 事件管理事件管理,是本章的核心,对事件管理的四个要,是本章的核心,对事件管理的四个要 素,各起什么作用?怎样应用熟练掌握?素,各起什么作用?怎样应用熟练掌握? 对对事件处理的三个方式事件处理的三个方式要清楚,至少掌握一种方要清楚,至少掌握一种方 法法 对各组件的具体使用,重点是对各组件的具体使用,重点是按钮、文本框、标按钮、文本框、标 签签,其它了解,其它了解 对菜单、鼠标、键盘的事件管理做了解对菜单、鼠标、键盘的事件管理做了解 7.1 图形用户界面概述图形用户界面概述 图形用户界面图形用户界面gui(graphics user interface) 1、目
4、的、目的 在在applet或或application程序中提供程序中提供人机交互界面人机交互界面, 是不可缺少的部分。是不可缺少的部分。 2、有关的、有关的java包及类包及类 java.awt包,抽象窗口工具包包,抽象窗口工具包awt,是,是jdk1.0 版本,主要包括如下:版本,主要包括如下: p绘制图形、控制字体和颜色;绘制图形、控制字体和颜色; p容器及布局管理;容器及布局管理; p各种常用组件,如按钮、文本框、列表框等;各种常用组件,如按钮、文本框、列表框等; p菜单,对话框;菜单,对话框; p事件管理;事件管理; javax.swing包,是对包,是对awt的升级和扩充,比的升级和
5、扩充,比awt 组件更丰富、功能更强,由组件更丰富、功能更强,由jdk1.2以上版本提供,以上版本提供, 兼容兼容awt,各组件名前加,各组件名前加j字头,如字头,如jbutton。 为了开发为了开发gui程序,在程序,在java 1.2版之前,版之前, java提供了一个提供了一个awt类库,称为抽象窗口类库,称为抽象窗口 工具箱工具箱(简称简称awt) 。 由于由于awt存在严重缺陷,存在严重缺陷,sun从从java 1.2 版开始提供了一个新的组件库版开始提供了一个新的组件库swing。 swing可以说是第二代可以说是第二代gui开发工具集,它开发工具集,它 是通过是通过javax.s
6、wing包提供的,包提供的, javax.swing包也是包也是java基础类库的组成部基础类库的组成部 分。分。 7.1 图形用户界面概述图形用户界面概述 由于由于swing组件比组件比awt组件有许多优点,所组件有许多优点,所 以新开发的程序应该使用以新开发的程序应该使用swing组件而不应组件而不应 该再使用该再使用awt组件。组件。 swing组件并没有完全取代组件并没有完全取代awt,它只是替,它只是替 代了代了awt包中的图形用户界面组件(如包中的图形用户界面组件(如 button、textfield、textarea等),等),awt 中的一些辅助类(如中的一些辅助类(如grap
7、hics、color、 font、layoutmanager等)仍然保持不变。等)仍然保持不变。 另外,另外,swing仍然使用仍然使用awt的事件模型。的事件模型。 7.1 图形用户界面概述图形用户界面概述 swing组件简介组件简介 1. 组件及层次组件及层次 在在java语言中,与图形用户界面相关的包语言中,与图形用户界面相关的包 有多个,其中比较重要的有有多个,其中比较重要的有java.awt包、包、 java.awt.event包、包、javax.swing包。包。 图图7.1给出了有关包中常用的类及类的层次给出了有关包中常用的类及类的层次 结构。结构。 1. 组件及层次组件及层次
8、object awtevent color font fontmetrics graphics componentcontainer panelappletjapplet windowframe dialog jframe jdialog jcomponent l 图图7.1中中applet类在类在java.applet包中,以包中,以j开头的类在开头的类在 javax.swing包中,其他类在包中,其他类在java.awt包中。包中。 图7.1 java gui所用类的层次结构图 表表7-1 构建图形用户界面常用的类构建图形用户界面常用的类 类名含义说明 component组件类所有图形用户
9、界面类的超类 container容器类 component类的一个子类,是一种可以容纳其他组件和容 器的组件 jcomponent轻量组件类 所有轻量组件类的超类,它的子类都在javax.swing包中, 如jbutton、jlabel、jmenu、jradiobutton、jlist、 jtextfield、jtextarea、jscrollpane等 graphics图形类 抽象类,提供了在容器中绘制字符串和简单图形的图形环 境 color颜色类 这个类用来处理图形和组件的颜色。例如,可以为jframe、 jpanel等组件指定背景色和前景色,也可以指定绘制的线 条、图形和字符串的颜色 f
10、ont字体类 在使用绘图对象绘制字符串时可以指定字体,其中包括字 体、字型和大小 japplet小程序类 applet类的子类,创建基于swing的java小应用程序需要继 承japplet类 jframe框架窗口类 顶级窗口。在java图形应用程序中,它是包含其他swing组 件的最外层容器 jdialog对话框类 弹出式对话框,一般用来接收用户的输入和显示有关信息 java把把component类的子类或间接类的子类或间接 子类创建的对象称为一个子类创建的对象称为一个组件组件。 把把container的子类或间接子类创建的的子类或间接子类创建的 对象称为一个对象称为一个容器容器。 awt中
11、的大部分类都是中的大部分类都是容器类容器类 (container)和和组件类组件类(component) 的子类或间接子类。的子类或间接子类。 1. 组件及层次组件及层次 java.awt包中一部分类的层次关系如图所示包中一部分类的层次关系如图所示 1. 组件及层次组件及层次 2.组件分类组件分类 容器组件:容器组件:容器组件又可以分为三类:容器组件又可以分为三类: 顶层容器:包括顶层容器:包括 jframe、japplet、jdialog; 通用容器:包括通用容器:包括jpanel、 jscrollpane、jsplitpane、jtabbedpane、jtoolbar; 专用容器:包括专用
12、容器:包括jinternalframe、jlayeredpane、 jrootpane等。等。 基本组件:基本组件:基本组件包括基本组件包括jbutton、jtextfield、 jcombobox、jlist、jmenu、jslider等。这些组件有的等。这些组件有的 主要用于信息的显示,如主要用于信息的显示,如jlabel、jprogressbar、 jtooltip等,有的可以在其中编辑信息,如等,有的可以在其中编辑信息,如jtextarea、 jtextfield、jfilechooser、jcolorchooser、jtable、 jtree等。等。 菜单组件:菜单组件:菜单组件包括
13、菜单组件包括jmenubar、jmenu、 jmenuitem、jradiobuttonmenuitem、 jcheckboxmenuitem和和jpopupmenu等。这些组件主要等。这些组件主要 用于构建各种菜单。用于构建各种菜单。 2.组件分类组件分类 japplet:java.lang.applet的扩展版本。的扩展版本。 jbutton: 按钮或命令按钮。按钮或命令按钮。 jcheckbox: 复选框。复选框。 jcheckboxmenuitem: 复选菜单项。复选菜单项。 jcombobox: 组合框。组合框。 jcomponent: swing组件的基类。组件的基类。 jdial
14、og: 对话框窗口的基类。对话框窗口的基类。 jlabel: 标签项。标签项。 jlist: 列表框。列表框。 jmenu: 菜单。菜单。 jmenubar: 菜单条。菜单条。 jmenuitem: 菜单项。菜单项。 jpanel: 通用的轻量容器。通用的轻量容器。 jpasswordfield: 文本框(用来输入口令)文本框(用来输入口令) jcomponent类常用方法类常用方法 jcomponent抽象类是所有抽象类是所有swing组件的超类,其组件的超类,其 中定义了每个组件都可以使用的方法,常用的方法中定义了每个组件都可以使用的方法,常用的方法 有:有: public void se
15、tsize(int width,int height) 设置设置 组件或容器的大小。组件或容器的大小。 public void setvisible(boolean b) 设置组件或设置组件或 容器是否可见。容器是否可见。 public void setbackground(color c) 设置组件设置组件 的背景颜色,的背景颜色,color为颜色类。为颜色类。 public color getbackground() 返回组件的背景返回组件的背景 颜色,颜色,color为颜色类。为颜色类。 jcomponent类及其方法类及其方法 public void setforeground(col
16、or c) 设置组件的前景颜色。设置组件的前景颜色。 public color getforeground() 返回组件的前景颜色。返回组件的前景颜色。 public void setfont(font f) 设置组件上使用的字体,设置组件上使用的字体,font 为字体类。为字体类。 public font getfont() 返回组件上使用的字体。返回组件上使用的字体。 public graphics getgraphics() 返回组件的图形上下文返回组件的图形上下文 (graphics context)或绘图对象,或绘图对象,graphics为图形上下文类,为图形上下文类, 使用该类对象
17、可以在组件上绘制图形。使用该类对象可以在组件上绘制图形。 public void settooltiptext(string text) 设置组件上的提设置组件上的提 示信息。示信息。 public string gettooltiptext() 返回组件上的提示信息。返回组件上的提示信息。 container类及其方法类及其方法 容器(容器(container)也是一个类,实际上)也是一个类,实际上 是是component的子类,因此容器本身也是一的子类,因此容器本身也是一 个组件,具有组件的所有性质,但是它的主个组件,具有组件的所有性质,但是它的主 要功能是要功能是容纳其他组件和容器。容纳
18、其他组件和容器。 添加到容器中的组件位置和大小由容器的添加到容器中的组件位置和大小由容器的 布局管理器布局管理器决定决定(layout manager)。 setlayout()方法设置容器布局。方法设置容器布局。 容器中可以容纳其他组件,通过调用容器容器中可以容纳其他组件,通过调用容器 的的add()方法把其他组件添加到容器中。方法把其他组件添加到容器中。 container类及其方法类及其方法 container类中的常用方法:类中的常用方法: public component add(component comp) public component add(component comp,
19、 int index) 向容器中添加组件,向容器中添加组件,index参数指定组件添加到参数指定组件添加到 容器中的位置,无容器中的位置,无index参数则添加到默认位置。参数则添加到默认位置。 public void remove(component comp) 从容器中清除指定的组件。从容器中清除指定的组件。 container类及其方法类及其方法 public void setlayout(layoutmanager mgr) 设置容器的布局。参数设置容器的布局。参数mgr是布局管是布局管 理器对象,它决定组件在容器中如何摆放。理器对象,它决定组件在容器中如何摆放。 public voi
20、d paint(graphics g) 在容器上在容器上 绘制图形。绘制图形。 public void paintcomponents(graphics g) 在容器上绘制图形。在容器上绘制图形。 public void update(graphics g) 更新容更新容 器上绘制的图形。器上绘制的图形。 7.2 容器(容器(container) 容器的作用:容纳其它组件;容器的作用:容纳其它组件; 容器类:容器类:container类,继承于类,继承于component类;类; 基本容器:共有三种;基本容器:共有三种; 1、japplet:java小程序容器,可作为小程序容器,可作为顶层容器
21、顶层容器,除,除 菜单以外,可加入任何其它组件。菜单以外,可加入任何其它组件。 2、jframe:框架容器,生成弹出式窗口,可加入菜框架容器,生成弹出式窗口,可加入菜 单和任何组件,是独立于单和任何组件,是独立于japplet的的顶层容器顶层容器,可在,可在 applet和和application中使用。中使用。 3、jdialog:对话框容器,也是一种弹出式窗口,作对话框容器,也是一种弹出式窗口,作 为为顶层容器顶层容器,可加入其它组件,但不能加入菜单,用于,可加入其它组件,但不能加入菜单,用于 弹出一些信息。弹出一些信息。java提供一些标准的对话框,如提供一些标准的对话框,如 filed
22、ialog可推出可推出window风格的文件对话框,对文件风格的文件对话框,对文件 进行打开、保存等。进行打开、保存等。 一般容器:有一般容器:有jpanel,jscrollpanel,jtabbedpanel, jtoolbar等。等。 简单的框架窗口简单的框架窗口 1. 创建简单的框架窗口创建简单的框架窗口 每个使用每个使用swing gui的程序必须至少有一个顶层的程序必须至少有一个顶层 swing容器。容器。 对于对于gui应用程序来说,一般应该有一个主窗口,应用程序来说,一般应该有一个主窗口, 也称为框架窗口。在也称为框架窗口。在swing中,框架窗口是由中,框架窗口是由 jfram
23、e对象实现的。对象实现的。 2.jframe类常用的构造方法有:类常用的构造方法有: public jframe() 创建一个没有标题的窗口对象。创建一个没有标题的窗口对象。 public jframe(string title) 创建一个以创建一个以title为标为标 题的窗口对象。题的窗口对象。 3.常用方法常用方法 (1)创建窗口创建窗口 直接创建一个直接创建一个jframe的实例或通过继承的实例或通过继承jframe类来定义类来定义 子类,再创建对象。子类,再创建对象。 例:例: jframe frame=new jframe(窗体窗体); (2)设置标题设置标题 通过通过super(
24、string title)调用基类的构造方法,或通过调用基类的构造方法,或通过 settitle(string title)方法设置标题。方法设置标题。 jframe frame=new jframe(窗体窗体); 或或jframe frame=new jframe(); frame.settitle(“窗体窗体”); (3)设置初始位置设置初始位置 void setlocation(int x,int y)设置初始位置,其中设置初始位置,其中x,y是窗口是窗口 左上角在屏幕上的坐标值。左上角在屏幕上的坐标值。 (4)设置大小设置大小 void setsize(int w,int h) 设置设
25、置frame尺寸。尺寸。 简单的框架窗口简单的框架窗口 (5)设置窗体是否可见设置窗体是否可见 void setvisible(boolean b)设置窗体是否可见。设置窗体是否可见。 (6)窗体自适应组件窗体自适应组件 void pack()()调整调整frame大小自动适应显示所有组件。大小自动适应显示所有组件。 (7)定义关闭行为定义关闭行为 setdefaultcloseoperation(int operation)方法设置关闭行方法设置关闭行 为。其中为。其中operation取值如下:取值如下: exit_on_close:当关闭窗口时退出程序。:当关闭窗口时退出程序。 do_n
26、othing_on_close:当关闭窗口时不做任何处理。:当关闭窗口时不做任何处理。 hide_on_close:当关闭窗口时隐藏这个窗口。(默认):当关闭窗口时隐藏这个窗口。(默认) dispose_on_close:当关闭窗口时隐藏并处理这个窗:当关闭窗口时隐藏并处理这个窗 口。口。 简单的框架窗口简单的框架窗口 程序程序7.1 helloswing.java import javax.swing.*; public class helloswing public static void main(string args) jframe frame = new jframe(hello
27、swing); frame.setsize(400,240); frame.setvisible(true); frame.setdefaultcloseoperation( jframe.exit_on_close); 程序程序7.1 helloswing.java 图7-3 最简单的框架窗口 继承继承jframe类类 程序程序7.1的方法在创建比较简单的窗口时还的方法在创建比较简单的窗口时还 可以,如果窗口比较复杂,就会使得可以,如果窗口比较复杂,就会使得main() 方法的内容过多。方法的内容过多。 一般应该一般应该创建一个继承创建一个继承jframe类的子类类的子类, 然后编写程序创建
28、该类对象。然后编写程序创建该类对象。 程序程序7.2 helloswing.java import javax.swing.*; public class helloswing extends jframe public helloswing1() this( helloswing ); public helloswing(string title) super(title); setsize(400,250); setlocation(350,250); setvisible(true); setdefaultcloseoperation(jframe.exit_on_close); pub
29、lic static void main(string args) helloswing frame = new helloswing(); 在框架中添加组件在框架中添加组件 若向顶层容器(若向顶层容器(jframe、japplet、 jdialog)中添加组件,可以使用容器的)中添加组件,可以使用容器的 add()方法实现。方法实现。 必须清楚容器使用的布局管理器,否则可必须清楚容器使用的布局管理器,否则可 能会得不到需要的结果。能会得不到需要的结果。 程序程序7.3 simpleframe.java import java.awt.*; import javax.swing.*; publ
30、ic class simpleframe extends jframe jbutton jbutton1,jbutton2; public simpleframe(string title) super(title); jbutton1 = new jbutton(ok); jbutton2 = new jbutton(cancel); setlayout(new flowlayout(); add(jbutton1); add(jbutton2); setsize(400,300); setvisible(true); setdefaultcloseoperation(jframe.exit
31、_on_close); public static void main(string args) simpleframe frame = new simpleframe(frame with button); 在框架中添加组件在框架中添加组件 实际上实际上jframe对象是由多个窗格组成的,对象是由多个窗格组成的, 如图如图7.6所示。所示。 根 窗 格 root pane 内容窗格 content pane 玻璃窗格 glass pane 图7.6 jframe容器的层次结构 在框架中添加组件在框架中添加组件 jframe对象的中间层是对象的中间层是内容窗格(内容窗格(content pan
32、e),它是一个,它是一个容器对象容器对象。 用容器的用容器的add()方法添加的组件实际是添加到该方法添加的组件实际是添加到该 内容窗格中的。内容窗格中的。 每个容器都有一个布局管理器,它管理着组件在每个容器都有一个布局管理器,它管理着组件在 其中的大小、位置等。其中的大小、位置等。 内容窗格默认的布局管理器是内容窗格默认的布局管理器是borderlayout, 即边界式布局。即边界式布局。 可以使用容器的可以使用容器的setlayout()方法改变容器的布方法改变容器的布 局管理器。局管理器。 7.3 容器布局容器布局 1 borderlayout布局管理器布局管理器 2 flowlayou
33、t布局管理器布局管理器 3 gridlayout布局管理器布局管理器 4 其他布局管理器其他布局管理器 5 面板容器及容器的嵌套面板容器及容器的嵌套 6 应用程序外观应用程序外观 java语言的一个特点是强调程序的平台无语言的一个特点是强调程序的平台无 关性。对于图形用户界面同样是这样。关性。对于图形用户界面同样是这样。 在在java的图形界面程序中,它是通过为每的图形界面程序中,它是通过为每 种容器提供了布局管理器来实现组件布局种容器提供了布局管理器来实现组件布局 的。的。 所谓所谓布局管理器布局管理器就是就是为容器设置一个为容器设置一个 layoutmanager对象对象(即布局管理器对象
34、即布局管理器对象), 来管理组件在容器中摆放的顺序、位置、来管理组件在容器中摆放的顺序、位置、 大小以及当窗口大小改变后组件如何变化大小以及当窗口大小改变后组件如何变化 等特征。等特征。 7.3 容器布局容器布局 通过使用布局管理器机制就可以实现通过使用布局管理器机制就可以实现gui的的 跨平台性,同时避免为每个组件设置绝对跨平台性,同时避免为每个组件设置绝对 位置。位置。 常用的布局管理器有:常用的布局管理器有: flowlayout borderlayout gridlayout cardlayout和和gridbaglayout 这些类都是在这些类都是在java.awt包中定义的。包中定
35、义的。 7.3 容器布局容器布局 每种容器都有默认的布局管理器,也可以每种容器都有默认的布局管理器,也可以 为容器指定新的布局管理器。为容器指定新的布局管理器。 如果要将某个容器的布局管理器设置为新如果要将某个容器的布局管理器设置为新 的布局,需要使用构造方法创建一个布局的布局,需要使用构造方法创建一个布局 管理器对象,然后使用容器的管理器对象,然后使用容器的setlayout() 方法将容器设置为这种布局管理器。方法将容器设置为这种布局管理器。 7.3 容器布局容器布局 borderlayout:边界式布局边界式布局。是是swing包中包中 容器容器jframe、japplet、jdialo
36、g的默认布的默认布 局管理器。局管理器。 p布局特点:将容器分为布局特点:将容器分为东西南北中东西南北中五个区域,五个区域, 通常每个区域放一个组件,位置及大小无法控通常每个区域放一个组件,位置及大小无法控 制;制; p构造方法:有两个构造方法:有两个 public borderlayout() public borderlayout(int h_gap,int v_gap) 1. borderlayout布局管理器布局管理器 borderlayout的构造方法的构造方法 public borderlayout(int hgap, int vgap) 该构造方法创建一个布局管理器对象,该构造方
37、法创建一个布局管理器对象, hgap和和vgap分别指定使用这种布局时组件分别指定使用这种布局时组件 之间的水平间隔和垂直间隔距离,单位为之间的水平间隔和垂直间隔距离,单位为 像素。像素。 public borderlayout() 该构造方法创建一该构造方法创建一 个个borderlayout布局管理器对象,使用这布局管理器对象,使用这 种布局时组件之间没有间隔。种布局时组件之间没有间隔。 borderlayout布局管理器布局管理器 borderlayout布局也叫边界式布局,它将布局也叫边界式布局,它将 容器分成容器分成东、南、西、北、中东、南、西、北、中五个区域,五个区域, 每个区域可
38、放置一个组件或其他容器。北每个区域可放置一个组件或其他容器。北 占据容器的上方,东占据容器的右侧,等占据容器的上方,东占据容器的右侧,等 等。中间区域是在东、南、西、北都填满等。中间区域是在东、南、西、北都填满 后剩下的区域。后剩下的区域。 若要改变容器的布局管理器须调用容器的若要改变容器的布局管理器须调用容器的 setlayout()方法,它的格式为:方法,它的格式为: public void setlayout(layoutmanager layout) borderlayout布局管理器布局管理器 使用使用borderlayout 布局管理器,当窗口的大小布局管理器,当窗口的大小 改变时
39、,容器中的组件大小相应改变。当窗口垂改变时,容器中的组件大小相应改变。当窗口垂 直延伸时,东、西、中区域也延伸;而当窗口水直延伸时,东、西、中区域也延伸;而当窗口水 平延伸时,南、北、中区域也延伸。平延伸时,南、北、中区域也延伸。 当某个区域没有添加组件时,中央组件会占据无当某个区域没有添加组件时,中央组件会占据无 组件的空间,但若没有中央组件,四周组件都有,组件的空间,但若没有中央组件,四周组件都有, 中央区域空出,请读者自己修改程序,去掉某个中央区域空出,请读者自己修改程序,去掉某个 区域的组件,观察程序运行效果。区域的组件,观察程序运行效果。 borderlayout布局管理器布局管理器
40、 向向borderlayout布局的容器中添加组件应该使用布局的容器中添加组件应该使用 add(component c, int index)方法,方法,c为添加的为添加的 组件,组件,index为指定的位置。为指定的位置。 指定位置需要使用指定位置需要使用borderlayout类定义的五个常类定义的五个常 量:量: borderlayout.north borderlayout.south borderlayout.east borderlayout.west borderlayout.center 如果不指定位置,组件添加到中央位置。如果不指定位置,组件添加到中央位置。 见见bordla
41、youttest.java 程序程序7.4 borderlayoutdemo.java import java.awt.*; import javax.swing.*; public class borderlayoutdemo extends jframe jbutton jbutton1,jbutton2, jbutton3,jbutton4,jbutton5; public borderlayoutdemo(string title) jbutton1 = new jbutton(北北); jbutton2 = new jbutton(南南); jbutton3 = new jbutto
42、n(西西); jbutton4 = new jbutton(东东); jbutton5 = new jbutton(中中); / 设置布局管理器设置布局管理器 setlayout(new borderlayout(10,10); add(jbutton1, borderlayout.north); add(jbutton2, borderlayout.south); add(jbutton3, borderlayout.west); add(jbutton4, borderlayout.east); add(jbutton5, borderlayout.center); setsize(300
43、,240); settitle(title); setvisible(true); setdefaultcloseoperation(jframe.exit_on_cl ose); public static void main(string args) borderlayoutdemo window = new borderlayoutdemo(border demo); 程序运行结果如图所示:程序运行结果如图所示: 图图7-6 边界式布局边界式布局 flowlayout;流式布局流式布局,是,是applet和和frame和和jpanel 的默认布局。的默认布局。 p布局特点:组件按加入的先
44、后顺序依次从左至右,从上至布局特点:组件按加入的先后顺序依次从左至右,从上至 下排列,位置及大小无法控制;下排列,位置及大小无法控制; p构造方法:有三个构造方法:有三个 public flowlayout(); public flowlayout(int alignment); 对齐方式:对齐方式:flowlayout.left 左对齐左对齐 flowlayout.center 中间对齐中间对齐 flowlayout.left 右对齐右对齐 public flowlayout(int alignment,int h_gap,int v_gap); h_gap 水平间隙;水平间隙;v_gap垂
45、直间隙。垂直间隙。 2. flowlayout布局管理器布局管理器 flowlayout布局管理器布局管理器 flowlayout布局也叫布局也叫流式布局流式布局,它是最简单的布,它是最简单的布 局管理器。局管理器。是是applet、frame和和jpanel的默认布的默认布 局。局。 设置为这种布局管理器的容器,当向其中添加组设置为这种布局管理器的容器,当向其中添加组 件时组件是件时组件是从左到右,从上到下从左到右,从上到下,一个一个地放,一个一个地放 置到容器中,一行放不下,放到下一行。置到容器中,一行放不下,放到下一行。 采用这种布局管理器的容器,当调整窗口大小后,采用这种布局管理器的容
46、器,当调整窗口大小后, 布局管理器会重新调整组件的摆放位置,组件的布局管理器会重新调整组件的摆放位置,组件的 大小和相对位置不变,组件的大小采用最佳尺寸。大小和相对位置不变,组件的大小采用最佳尺寸。 flowlayout类常用的构造方法类常用的构造方法 public flowlayout(int align, int hgap, int vgap) 指定添加到容器中组件的对齐方式指定添加到容器中组件的对齐方式(align)、 水平间距水平间距(hgap)和垂直间距和垂直间距(vgap)。 对齐方式对齐方式align的取值必须为的取值必须为flowlayout定义的整型常定义的整型常 量之一:量
47、之一: flowlayout.left:表示左对齐表示左对齐 flowlayout.right:右对齐右对齐 flowlayout.center:居中对齐居中对齐 水平间距是指水平方向上两个组件之间的距离,单位水平间距是指水平方向上两个组件之间的距离,单位 是像素。是像素。 垂直间距是行之间的距离,单位也是像素。垂直间距是行之间的距离,单位也是像素。 flowlayout类常用的构造方法类常用的构造方法 public flowlayout(int align) 该构造方法该构造方法 只指定对齐方式。组件之间的水平间距和只指定对齐方式。组件之间的水平间距和 垂直间距使用默认值垂直间距使用默认值5
48、个像素。个像素。 public flowlayout() 使用该构造方法构造使用该构造方法构造 的对象,对齐和间距都采用默认值:居中的对象,对齐和间距都采用默认值:居中 对齐,水平间距和垂直间距是对齐,水平间距和垂直间距是5个像素。个像素。 程序程序7.5 flowlayoutdemo.java import java.awt.*; import javax.swing.*; public class flowlayoutdemo extends jframe public flowlayoutdemo() flowlayout layout = new flowlayout(flowlayo
49、ut.center,10,20); setlayout(layout); add(new jbutton(button 1); add(new jbutton(2); add(new jbutton(button 3); add(new jbutton(long-named button 4); add(new jbutton(button 5); settitle(flowlayout demo); / 设置窗口标题设置窗口标题 setsize(380,150); setvisible(true); setdefaultcloseoperation(jframe.exit_on_c lose
50、); public static void main(string args) flowlayoutdemo window = new flowlayoutdemo(); 程序的运行结果如图所示:程序的运行结果如图所示: 图图7-7 流式布局的应用流式布局的应用 3. gridlayout布局管理器布局管理器 也叫也叫网格式布局网格式布局,将容器分成大小相等的单,将容器分成大小相等的单 元格,每个单元格可放置一个组件,每个组元格,每个单元格可放置一个组件,每个组 件占据单元格的整个空间,调整容器的大小,件占据单元格的整个空间,调整容器的大小, 单元格大小随之改变。单元格大小随之改变。 grid
51、layout类的构造方法类的构造方法 public gridlayout(int rows, int cols, int hgap, int vgap) 参数参数rows和和cols分别指定网格布局的行数和列数分别指定网格布局的行数和列数 hgap和和vgap指定组件的水平间隔和垂直间隔,单位为指定组件的水平间隔和垂直间隔,单位为 像素。像素。 行和列参数至少有一个为非行和列参数至少有一个为非0值。值。 public gridlayout(int rows, int cols) 缺省组件缺省组件 之间的间隔,组件之间间隔为之间的间隔,组件之间间隔为0像素。像素。 public gridlayo
52、ut() 创建只有一行的网格布局对创建只有一行的网格布局对 象,每个组件占一列,所有组件在一行,组件之象,每个组件占一列,所有组件在一行,组件之 间间隔为间间隔为0像素。像素。 gridlayout类的构造方法类的构造方法 如果指定的行数和列数与添加的组件个数不一致如果指定的行数和列数与添加的组件个数不一致 时时 当行数、列数都不为零,以行优先当行数、列数都不为零,以行优先 若有一个为零,则以非零值优先若有一个为零,则以非零值优先 例:例: cp.setlayout(new gridlayout(3,1,10,20); 如果添加的组件多于如果添加的组件多于3个,结果是个,结果是3行多列。行多列
53、。 cp.setlayout(new gridlayout(3,0,10,20); 如果添加的组件多于如果添加的组件多于3个,结果是个,结果是3行多列。行多列。 cp.setlayout(new gridlayout(0,3,10,20); 如果添加的组件多于如果添加的组件多于3个,结果是多行个,结果是多行3列。列。 gridlayout布局管理器布局管理器 向网格布局的容器中添加组件,只需调用容器的向网格布局的容器中添加组件,只需调用容器的 add()方法即可,不用指定位置,系统按照先行后方法即可,不用指定位置,系统按照先行后 列的次序依次将组件添加到容器中。列的次序依次将组件添加到容器中。
54、 程序7.6 gridlayoutdemo.java import java.awt.*; import javax.swing.*; public class gridlayoutdemo extends jframe public gridlayoutdemo() setlayout(new gridlayout(0,2); add(new jbutton(button 1); add(new jbutton(2); 程序程序7.6 gridlayoutdemo.java add(new jbutton(button 3); add(new jbutton(long-named butto
55、n 4); add(new jbutton(button 5); settitle(gridlayout demo); pack(); / 以紧缩的形式显示组件 setvisible(true); setdefaultcloseoperation(jframe.exit_on_close); public static void main(string args) gridlayoutdemo window = new gridlayoutdemo (); gridlayout布局管理器布局管理器 程序的运行结果如图所示:程序的运行结果如图所示: 图9-8 网格布局的应用 4. 其他布局管理器
56、其他布局管理器 除上面介绍的布局管理器外,除上面介绍的布局管理器外,java语言还提语言还提 供了若干布局管理器,例如:供了若干布局管理器,例如: cardlayout、gridbaglayout、boxlayout、 grouplayout和和springlayout等。等。 每种布局管理器都有自己的特点,应用在特每种布局管理器都有自己的特点,应用在特 殊的场合。其中有些非常复杂,可应用于较殊的场合。其中有些非常复杂,可应用于较 复杂的图形用户界面的设计中。复杂的图形用户界面的设计中。 如果界面复杂,可以考虑使用集成开发环境如果界面复杂,可以考虑使用集成开发环境 (ide)来设计用户界面。)
57、来设计用户界面。 其他布局管理器其他布局管理器 在设计图形界面时,在设计图形界面时,java也支持组件绝对也支持组件绝对 定位的设计。定位的设计。 如果需要手工控制组件在容器中的大小和如果需要手工控制组件在容器中的大小和 位置,应该将容器的布局管理器设置为位置,应该将容器的布局管理器设置为null, 即调用容器的即调用容器的setlayout()方法,并将参数方法,并将参数 指定为指定为null,然后调用组件的,然后调用组件的setlocation() 方法设置组件在容器中的位置、调用方法设置组件在容器中的位置、调用 setsize()或或setbounds()方法设置组件的方法设置组件的 大
58、小。大小。 不推荐使用这种方法。不推荐使用这种方法。 5.取消布局管理器及布置组件的方法取消布局管理器及布置组件的方法 p取消布局管理器的目的:不受布局管理器固定格取消布局管理器的目的:不受布局管理器固定格 式的限制,使组件可任意大小,摆放在任何位置,式的限制,使组件可任意大小,摆放在任何位置, 增加使用的灵活性。增加使用的灵活性。 p取消的方法:取消的方法:容器的对象名容器的对象名.setlayout(null); p布置组件的方法:布置组件的方法: 设置组件对象摆放位置及大小的方法:设置组件对象摆放位置及大小的方法: 组件对象名组件对象名.setbounds(new rectangle(x
59、,y,w,h); 或或setbounds(x,y,w,h); 再把组件对象添加到容器中:再把组件对象添加到容器中: 容器对象名容器对象名.add(组件对象名组件对象名) p演示例程:见演示例程:见layoutnull.java 6. 面板容器及容器的嵌套面板容器及容器的嵌套 jpanel类:由于某一种布局管理器的能力有限,类:由于某一种布局管理器的能力有限, 在设计复杂布局时通常采用容器嵌套的方式,即在设计复杂布局时通常采用容器嵌套的方式,即 把组件添加到一个中间容器中,再把中间容器作把组件添加到一个中间容器中,再把中间容器作 为组件添加到另一个容器中,从而实现复杂的布为组件添加到另一个容器中
60、,从而实现复杂的布 局。局。 jpanel类对象经常在构造复杂布局中作为类对象经常在构造复杂布局中作为中间容中间容 器器,既可以把它放入其他容器中,也可以在其上,既可以把它放入其他容器中,也可以在其上 放置其他容器和组件,但它放置其他容器和组件,但它不能单独显示不能单独显示,需要,需要 放到放到jframe或或applet这样的顶层容器中。这样的顶层容器中。 jframe、japplet、jdialog都默认有一个都默认有一个 jpanel。 jpanel的构造方法的构造方法 public jpanel(layoutmanager layout) 创建一个面板对象,使用指定的布局管理创建一个面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Syringaresinol-diglucoside-Standard-生命科学试剂-MCE
- Sulfaethoxypyridazine-Standard-生命科学试剂-MCE
- 七年级生物下册第六章第四节激素调节课时练新版新人教版
- 2025届新教材高考地理一轮复习第十二单元区域联系与区域发展第二节资源跨区域调配对区域发展的影响-以我国南水北调为例学案鲁教版
- 2024年二元酸二甲酯项目合作计划书
- 玉溪师范学院《教师职业道德与教育政策法规》2023-2024学年第一学期期末试卷
- 玉溪师范学院《国际货运与保险》2022-2023学年第一学期期末试卷
- 玉溪师范学院《程序设计》2023-2024学年期末试卷
- 玉溪师范学院《教育社会学》2022-2023学年第一学期期末试卷
- 2024年喹吖啶酮类合作协议书
- 当代德国学校劳动教育课程构建的经验与启示共3篇
- “小金库”治理与防范 习题及答案
- 王伟核桃经济价值及加工利用
- 全国河流水文站坐标
- 新生儿胎粪吸入综合征临床路径标准住院流程及路径表单
- 氯化钠特性表
- 钻井井架起升钢丝绳管理台账
- 单片机原理与应用说课
- 修辞手法课件(共46张PPT)
- 船舶租赁尽职调查
- GB/T 20307-2006纳米级长度的扫描电镜测量方法通则
评论
0/150
提交评论