版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第6 6章章GUIGUI应用程序设计应用程序设计 图形用户界面图形用户界面Graphics User Graphics User InterfaceInterface,缩写,缩写GUIGUI是指以图形的显是指以图形的显示方式与用户实现交互操作的应用程序示方式与用户实现交互操作的应用程序界面,设计具有界面,设计具有GUIGUI特征的应用程序被称特征的应用程序被称为为GUIGUI应用程序设计。应用程序设计。JavaJava提供了十分完提供了十分完善的图形用户界面功能,使得软件开发善的图形用户界面功能,使得软件开发人员可以轻松地开发出功能强大、界面人员可以轻松地开发出功能强大、界面友善、安全可靠的
2、应用城建,充分体现友善、安全可靠的应用城建,充分体现了了JavaJava语言的时代感与面向对象程序设语言的时代感与面向对象程序设计的优越性。计的优越性。6.1 Java6.1 Java图形用户界面概述图形用户界面概述 在在Java Java 语言中,为语言中,为GUIGUI应用程序设计提应用程序设计提供了强大的功能,其相关的类主要封装供了强大的功能,其相关的类主要封装在两个包在两个包java.awt java.awt 和和javax.swingjavax.swing中,其中包含了实现图形用户界面的所中,其中包含了实现图形用户界面的所有基本元素,这些基本元素主要包括容有基本元素,这些基本元素主要
3、包括容器、组件、绘图工具与布局管理器等。器、组件、绘图工具与布局管理器等。组件是与用户实现交互操作的部件,容组件是与用户实现交互操作的部件,容器是包容组件的部件,布局管理器是管器是包容组件的部件,布局管理器是管理组件在容器中布局的部件,绘图工具理组件在容器中布局的部件,绘图工具是绘制图形的部件。是绘制图形的部件。 java.awtjava.awt是是java1.1java1.1用来建立用来建立GUIGUI的图形的图形包,这里的包,这里的“awt“awt是抽象窗口工具包是抽象窗口工具包 (Abstract Windowing ToolkitAbstract Windowing Toolkit的缩
4、的缩写,其中的组件常被称为写,其中的组件常被称为AWTAWT组件,这种组件,这种组件的结构简单、外观固定,在组件的结构简单、外观固定,在JavaJava语语言的发布初期是构建用户界面的主要元言的发布初期是构建用户界面的主要元素,现在已经被基本淘汰使用。素,现在已经被基本淘汰使用。javax.swingjavax.swing是是JDK1.2JDK1.2之后提出的之后提出的AWTAWT改改进包,它改善了组件的显示外观,增强进包,它改善了组件的显示外观,增强了组件的控制能力,为了组件的控制能力,为JavaJava满足人们对满足人们对用户界面的更高要求给予了可靠保证。用户界面的更高要求给予了可靠保证。
5、 与与AWTAWT相比较,相比较,SwingSwing具有以下几点优势:具有以下几点优势: (1 1AWTAWT是基于同位体是基于同位体PeerPeer的体系结构,的体系结构,这种设计策略严重限制了用户界面中可以使用这种设计策略严重限制了用户界面中可以使用的组件种类及功能,成为一个致命的缺憾;而的组件种类及功能,成为一个致命的缺憾;而SwingSwing不需要本地提供同位体。不需要本地提供同位体。 (2 2在在AWTAWT中,有一部分代码是用中,有一部分代码是用C C编写的;而编写的;而SwingSwing是是100%100%的纯的纯JavaJava,增强了应用程序的与环,增强了应用程序的与环
6、境无关性。境无关性。 (3 3SwingSwing具有控制外观具有控制外观Pluggable look Pluggable look and feeland feel的能力,即允许用户自行定制桌面的能力,即允许用户自行定制桌面的显示风格,而的显示风格,而AWT AWT 完全依赖于本地平台。完全依赖于本地平台。 (4 4增加了裁剪板、鼠标提示和打印等功能。增加了裁剪板、鼠标提示和打印等功能。 所有所有SwingSwing组件类存在于组件类存在于javax.swingjavax.swing包包中。为了避免混淆,中。为了避免混淆,SwingSwing包中的所有类包中的所有类名都在原名都在原AWTAW
7、T类名的前面冠与类名的前面冠与“J”“J”。 例如,例如,JPanelJPanel、JFrameJFrame、JButtonJButton等。等。 对于用户界面,除了设计可视化组件的对于用户界面,除了设计可视化组件的显示外观外,还需要设计处理用户操作显示外观外,还需要设计处理用户操作请求的方式,这就是事件处理。请求的方式,这就是事件处理。 设计用户界面需要经历设计用户界面需要经历4 4个基本步骤:个基本步骤: (1)(1)创建与设置组件创建与设置组件 (2)(2)将组件加入到容器中将组件加入到容器中 (3)(3)布局组件布局组件 (4)(4)处理由组件产生的事件处理由组件产生的事件6.2 Sw
8、ing6.2 Swing容器容器 SwingSwing是在是在AWTAWT基础上发展而来的,人们在图形基础上发展而来的,人们在图形用户界面中使用的元素都属于用户界面中使用的元素都属于SwingSwing,其原因,其原因在于在于SwingSwing扩展了扩展了AWTAWT的功能,提高了的功能,提高了JavaJava程序程序的控制能力,体现了的控制能力,体现了JavaJava人性化的设计理念。人性化的设计理念。 容器是容器是GUIGUI设计中必不可少的一种界面元素,设计中必不可少的一种界面元素,它是用来放置其他组件的一种特殊部件,它是用来放置其他组件的一种特殊部件,JavaJava类库中提供了丰富
9、的容器类,为选择与创建容类库中提供了丰富的容器类,为选择与创建容器带来了极大的便捷。下面介绍两种常用的容器带来了极大的便捷。下面介绍两种常用的容器:顶层容器、面板容器。器:顶层容器、面板容器。6.2.1 6.2.1 顶层容器顶层容器 所谓顶层容器是指最外层的容器,即包所谓顶层容器是指最外层的容器,即包含所有组件或容器的那层容器。例如,含所有组件或容器的那层容器。例如,运行应用程序后打开的最外层窗口。每运行应用程序后打开的最外层窗口。每一个可视化的一个可视化的GUIGUI应用程序都应该有一个应用程序都应该有一个顶层容器。一个容器可以包含其他的容顶层容器。一个容器可以包含其他的容器,即容器之间可以
10、具有嵌套关系,这器,即容器之间可以具有嵌套关系,这样就形成了一个层次结构。如果将这个样就形成了一个层次结构。如果将这个容器层次结构用树型结构描述,顶层容容器层次结构用树型结构描述,顶层容器就是这棵树的根。器就是这棵树的根。 一个一个GUIGUI应用程序应该包含应用程序应该包含一个用一个用JFrameJFrame作为根的容器作为根的容器层级结构。层级结构。JFrameJFrame是是SwingSwing组件中承担顶层容器责任的组件中承担顶层容器责任的类,包含了描述顶层容器的类,包含了描述顶层容器的所有属性及操作行为。所有属性及操作行为。 在使用顶层容器时,需要注意以下几点:在使用顶层容器时,需要
11、注意以下几点: (1 1为了能够在屏幕上显示出来,每个为了能够在屏幕上显示出来,每个GUIGUI组组件都必须放置在一个容器中。件都必须放置在一个容器中。 (2 2每个每个GUIGUI组件只能被添加到一个容器中。组件只能被添加到一个容器中。如果一个组件已经被添加到一个容器中,又把如果一个组件已经被添加到一个容器中,又把它添加到另外一个容器中,则它将首先被从第它添加到另外一个容器中,则它将首先被从第一个容器中删除,然后再移入第二个容器。一个容器中删除,然后再移入第二个容器。 (3 3在在SwingSwing中,顶层容器包含一个内容窗格中,顶层容器包含一个内容窗格Content paneConten
12、t pane),所有的可视组件都必须放),所有的可视组件都必须放在内容窗格中。可以调用顶层容器中在内容窗格中。可以调用顶层容器中getContentPane()getContentPane()方法得到当前容器的内容窗方法得到当前容器的内容窗格,并使用格,并使用add()add()方法将组件添加到其中。方法将组件添加到其中。 (4 4可以在顶层容器中添加菜单栏,它将位可以在顶层容器中添加菜单栏,它将位于顶层容器的约定位置。例如,在于顶层容器的约定位置。例如,在WindowWindow环境环境下,菜单栏位于窗口标题栏的下面。下,菜单栏位于窗口标题栏的下面。 1.1.创建顶层容器创建顶层容器 通常,
13、顶层容器就是人们看到的最外层通常,顶层容器就是人们看到的最外层窗口,创建这个窗口的基本过程为:窗口,创建这个窗口的基本过程为: (1) (1) 定义一个定义一个JFrameJFrame的子类。的子类。 (2) (2) 创建上述子类对象。创建上述子类对象。 (3) (3) 设置窗口关闭操作。设置窗口关闭操作。 / file name:SimpleJFrameClass .javaimport javax.swing.*;public class SimpleJFrameClass extends JFrame public static final int DEFAULT_WIDTH = 300
14、; public static final int DEFAULT_HEIGHT = 200; public SimpleJFrameClass() setSize( DEFAULT_WIDTH, DEFAULT_HEIGHT ); setTitle(Simple JFrame Window); setVisible(true); 需要说明下面几点:需要说明下面几点: (1) (1) 有关有关SwingSwing容器与组件的类都被封装在容器与组件的类都被封装在javax.swingjavax.swing包中,因而,在设计包中,因而,在设计singsing的图形用的图形用户界面应用程序时,需要将
15、这个包加载进来。户界面应用程序时,需要将这个包加载进来。 (2) JFrame(2) JFrame类是类是JavaJava类库提供的顶层窗口类,类库提供的顶层窗口类,定义其子类的目的是针对用户的需求,在子类定义其子类的目的是针对用户的需求,在子类中给予相应的设置或重定义。中给予相应的设置或重定义。 (3) DEFAULT_WIDTH(3) DEFAULT_WIDTH与与DEFAULT_HEIGHTDEFAULT_HEIGHT是子类中是子类中定义的两个常量,用于表示窗口大小。定义的两个常量,用于表示窗口大小。 (4) (4) 在构造方法中设置窗口的大小,并将窗口在构造方法中设置窗口的大小,并将窗
16、口的可视状态设置为可见。需要说明,如果不设的可视状态设置为可见。需要说明,如果不设置窗口的大小,窗口的默认大小为置窗口的大小,窗口的默认大小为0 0;如果不设;如果不设置窗口的可视状态,其默认可视状态为隐藏。置窗口的可视状态,其默认可视状态为隐藏。 (5) setTitle() (5) setTitle() 用于设置窗口标题栏显示的内用于设置窗口标题栏显示的内容,也可以利用容,也可以利用getTitle()getTitle()获取当前标题栏的获取当前标题栏的现实内容。现实内容。/ file name:TestSimpleJFrameClass .javaimport javax.swing.*
17、;public class TestSimpleJFrameClass public static void main(String agrs) SimpleJFrameClass frame = new SimpleJFrameClass(); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); JFrame.DO_NOTHING_ON_CLOSE JFrame.DO_NOTHING_ON_CLOSE 表示表示“关闭窗口按钮失效。关闭窗口按钮失效。JFrame.HIDE_ON_CLOSE JFrame.HIDE_ON_CLOSE 表示
18、将窗口隐藏起来,但没有关闭。表示将窗口隐藏起来,但没有关闭。JFrame.DISPOSE_ON_CLOSE JFrame.DISPOSE_ON_CLOSE 表示撤消窗口。表示撤消窗口。2 2定位顶层容器定位顶层容器 JFrameJFrame类从各层父类中继承了许多用于处理窗类从各层父类中继承了许多用于处理窗口大小及位置的方法。口大小及位置的方法。 setLocationsetLocation的定义格式为:的定义格式为: public void setLocation(int x,int y)public void setLocation(int x,int y) 功能是将顶层窗口移至屏幕坐标功
19、能是将顶层窗口移至屏幕坐标x,yx,y)。)。 setBounds()setBounds()的定义格式为:的定义格式为: public void setBounds(int xleft,public void setBounds(int xleft, int yleft,int width,int height) int yleft,int width,int height) 功能是将顶层窗口的左上角移至屏幕坐标为功能是将顶层窗口的左上角移至屏幕坐标为 (xleft,yleftxleft,yleft),宽为),宽为widthwidth,高为,高为heightheight。public Simp
20、leJFrameClass() setSize( DEFAULT_WIDTH, DEFAULT_HEIGHT );setLocation(100,100); setTitle(Simple JFrame Window);setVisible(true);3 3设置顶层容器大小设置顶层容器大小 setSize() 用于设置顶层容器的大小,另外,还用于设置顶层容器的大小,另外,还可以利用可以利用setResizable() 通过带入通过带入true或或false确确定顶层容器的大小是否可调节。定顶层容器的大小是否可调节。 Toolkit kit = Toolkit.getDefaultToolki
21、t(); Dimension screenSize = kit.getScreenSize(); int screenWidth = screenSize.width; int screenHeight = screenSize.height; setSize(screenWidth / 2, screenHeight / 2); setTitle(Simple JFrame Window); setVisible(true); setResizable(false);6.2.2 6.2.2 面板容器面板容器 面板是一种没有边框、没有标题栏面板是一种没有边框、没有标题栏的中间层容器。常见的面板
22、容器有的中间层容器。常见的面板容器有两种:一种是普通的面板容器,在两种:一种是普通的面板容器,在SwingSwing中用中用JPanelJPanel类实现;另一种是类实现;另一种是带滚动视图的容器,在带滚动视图的容器,在SwingSwing中用中用JScrollPaneJScrollPane类实现。类实现。 1. 1. 普通面板容器普通面板容器l这是一种常用的容器种类。在默认情况这是一种常用的容器种类。在默认情况下,除背景外不会自行绘制任何东西。下,除背景外不会自行绘制任何东西。当然,可以利用相应的成员方法为它添当然,可以利用相应的成员方法为它添加边框,或定制想要绘制的内容。加边框,或定制想要
23、绘制的内容。l在默认情况下,面板容器不透明,但可在默认情况下,面板容器不透明,但可以调用以调用setOpaque()setOpaque()成员方法将其设置为成员方法将其设置为透明。如面板容器透明,就没有背景,透明。如面板容器透明,就没有背景,这样就会让位于容器覆盖区域下面的组这样就会让位于容器覆盖区域下面的组件显现出来。件显现出来。 JPanelJPanel的默认布局管理器是的默认布局管理器是FlowLayoutFlowLayout。所谓布局管理器是指能够布局容器中每个所谓布局管理器是指能够布局容器中每个组件所放位置和大小的部件,不同的布局组件所放位置和大小的部件,不同的布局管理器对应不同的组
24、件布局策略。可以在管理器对应不同的组件布局策略。可以在创建容器时指定布局管理器,或调用创建容器时指定布局管理器,或调用setLayout()setLayout()成员方法更改布局管理器。成员方法更改布局管理器。 在在JPanelJPanel类中提供了两种格式的构造方类中提供了两种格式的构造方法:法: JPanel()JPanel() 这是无参数的构造方法,它将创建一个这是无参数的构造方法,它将创建一个布局管理器为布局管理器为FlowLayoutFlowLayout的面板容器。的面板容器。 JPanel(LayoutManager layout)JPanel(LayoutManager layo
25、ut) 这个构造方法将创造一个布局管理器为这个构造方法将创造一个布局管理器为layoutlayout的面板容器。的面板容器。 / file name:SimpleJPanelClass.javaimport javax.swing.*;public class SimpleJPanelClass extends JPanel JLabel nameLabel, passwordLabel; / 标签标签 JTextField name; / 文本域文本域 JPasswordField password; / 密码框密码框 JButton okButton, cancelButton; / 按钮
26、按钮 public SimpleJPanelClass() nameLabel = new JLabel(Name:); passwordLabel = new JLabel(Password:); name = new JTextField(20); password = new JPasswordField(20); okButton = new JButton(OK); cancelButton = new JButton(Cancel); add(nameLabel); add(name); add(passwordLabel); add(password); add(okButton
27、); add(cancelButton); / file name:SimpleJFrameClass .javaimport javax.swing.*;public class SimpleJFrameClass extends JFrame SimpleJPanelClass panel; / 面板容器对象面板容器对象 public static final int DEFAULT_WIDTH = 320; public static final int DEFAULT_HEIGHT = 120; public SimpleJFrameClass() setSize(DEFAULT_WI
28、DTH, DEFAULT_HEIGHT); setTitle(用户登录用户登录); panel = new SimpleJPanelClass(); / 创建面板容器对象创建面板容器对象 getContentPane().add(panel); / 将面板放置到窗口中将面板放置到窗口中 setVisible(true); setResizable(false); / fille name:TestJPanelClass .javaimport javax.swing.*;public class TestJPanelClass public static void main(String ag
29、rs) SimpleJFrameClass frame = new SimpleJFrameClass(); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); 2. 2. 带滚动视图的容器带滚动视图的容器l在在SwingSwing中用中用JScrollPaneJScrollPane类实现具有滚类实现具有滚动功能的容器。由于屏幕大小的限制,动功能的容器。由于屏幕大小的限制,有些组件不能在一屏中全部显示出来,有些组件不能在一屏中全部显示出来,或显示内容的大小动态地发生变化,此或显示内容的大小动态地发生变化,此时,可以使用带滚动功能的视口容
30、器,时,可以使用带滚动功能的视口容器,利用它提供的滚动条移动窗口,让其中利用它提供的滚动条移动窗口,让其中的组件能够分区域地显示出来。的组件能够分区域地显示出来。l应用应用JScrollPaneJScrollPane容器的方式很简单,只容器的方式很简单,只要创建一个要创建一个JScrollPaneJScrollPane对象,并为它指对象,并为它指定将要显示的内容即可。定将要显示的内容即可。 / file name:JFrameClass .javaimport java.awt.*;public class JFrameClass extends JFrame public static fi
31、nal int DEFAULT_WIDTH = 320; public static final int DEFAULT_HEIGHT = 120; JTextArea textArea; / 多行文本域多行文本域 JScrollPane scrollPane; / 带滚动视图的容器带滚动视图的容器 public JFrameClass() textArea = new JTextArea(5, 30); scrollPane = new JScrollPane(textArea); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); setTitle(带滚动视图的
32、容器带滚动视图的容器); / 设置标题栏显示内容设置标题栏显示内容 getContentPane().add(scrollPane, BorderLayout.CENTER); setVisible(true); setResizable(false); scrollPane = new JScrollPane(textArea); 这条语句将创建带滚动视图的容器,并与多行文这条语句将创建带滚动视图的容器,并与多行文本域对象本域对象textArea建立关联,一旦建立关联,一旦textArea中需中需要显示的内容超出了显示区域,将自动启动滚动要显示的内容超出了显示区域,将自动启动滚动功能,用户可
33、以通过拖拽滚动条将隐藏部分滚动功能,用户可以通过拖拽滚动条将隐藏部分滚动显示出来。显示出来。 / file nama:TestJScrollPaneClass.javaimport javax.swing.*;public class TestJScrollPaneClass public static void main(String agrs) JFrameClass frame = new JFrameClass(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 6.3 6.3 布局管理器布局管理器 前面讲述了前面讲述了Sw
34、ingSwing容器以及将组件放入容容器以及将组件放入容器中的基本方法。但是,如何在容器中器中的基本方法。但是,如何在容器中摆放各个组件,每个组件的大小如何控摆放各个组件,每个组件的大小如何控制是界面设计者需要十分清楚的事情。制是界面设计者需要十分清楚的事情。 6.3.1 6.3.1 布局管理器概述布局管理器概述 JavaJava是一种面向网络环境编程的语言,是一种面向网络环境编程的语言,因而,必须顾及应用程序在各种环境下因而,必须顾及应用程序在各种环境下运行的效果。如果直接使用坐标确定每运行的效果。如果直接使用坐标确定每个组件在容器中的位置,就可能会由于个组件在容器中的位置,就可能会由于各种
35、计算机系统的坐标系差异,造成应各种计算机系统的坐标系差异,造成应用程序在不同的环境中运行,所显示的用程序在不同的环境中运行,所显示的效果不同,为此效果不同,为此JavaJava提出了布局管理器提出了布局管理器的概念。所谓布局管理器是指按照特定的概念。所谓布局管理器是指按照特定的策略安排每个组件在容器中摆放位置的策略安排每个组件在容器中摆放位置及大小的一种特殊对象。及大小的一种特殊对象。 在在LayoutManager接口中主要声明了下面几个关于增加、删除接口中主要声明了下面几个关于增加、删除组件,以及控制布局管理器大小的抽象方法。组件,以及控制布局管理器大小的抽象方法。 public void
36、 addLayoutComponent(String name, Component comp) 将组件将组件comp添加到布局管理器中添加到布局管理器中 public void removeLayoutComponent(Component comp) 将从布局管理器中删除组件将从布局管理器中删除组件comp public Dimension preferredLayoutSize(Container parent) 将返回给定容器的最佳尺寸将返回给定容器的最佳尺寸 public Dimension minimumLayoutSize(Container parent) 将返回给定容器的最小
37、尺寸将返回给定容器的最小尺寸6.3.2 FlowLayout6.3.2 FlowLayout布局管理器布局管理器 l FlowLayoutFlowLayout被称为流程布局管理器,它是被称为流程布局管理器,它是JPanelJPanel面板容器的默认布局管理器。这种布局面板容器的默认布局管理器。这种布局管理器按照从上到下、从左到右的规则将添加管理器按照从上到下、从左到右的规则将添加的组件依次摆放容器中。如果一行中没有足够的组件依次摆放容器中。如果一行中没有足够的空间放下一个组件,的空间放下一个组件,FlowLayoutFlowLayout将其放在新将其放在新的一行上。的一行上。l 在创建在创建F
38、lowLayoutFlowLayout对象时可以指定一行中组件对象时可以指定一行中组件的对齐方式,默认对齐方式为居中,还可以指的对齐方式,默认对齐方式为居中,还可以指定每个组件之间在水平和垂直方向上的间隙大定每个组件之间在水平和垂直方向上的间隙大小,默认值为小,默认值为5 5个像素。这种布局管理器并不个像素。这种布局管理器并不调整每个组件的大小,而是永远保持每个组件调整每个组件的大小,而是永远保持每个组件的最佳尺寸,剩余的空间填补空格。的最佳尺寸,剩余的空间填补空格。 FlowLayout()FlowLayout() 无参数的构造方法。无参数的构造方法。 FlowLayout(int alig
39、n)FlowLayout(int align) 将创建一个对齐方式为将创建一个对齐方式为alignalign的布局管理器对象。的布局管理器对象。alignalign可以为在可以为在FlowLayoutFlowLayout类定义的常量类定义的常量LEFTLEFT、RIGHTRIGHT、CENTERCENTER、LEADINGLEADING和和TRAILINGTRAILING之一。之一。 FlowLayout(int align, int hgap, int vgap)FlowLayout(int align, int hgap, int vgap) 将创建一个对齐方式为将创建一个对齐方式为ali
40、gnalign、水平间隙为、水平间隙为hgaphgap个个像素、垂直间隙为像素、垂直间隙为vgapvgap个像素的布局管理器对象。个像素的布局管理器对象。 / file name:JFrameClass .javaimport java.awt.*;import javax.swing.*;public class JFrameClass extends JFrame JButton button = new JButton9; / 定义定义9个按钮类对象个按钮类对象 FlowLayout layout; / 定义布局管理器对象定义布局管理器对象 public JFrameClass() su
41、per(FlowLayout 应用举例应用举例); / 设置窗口标题设置窗口标题 String label; layout = new FlowLayout(FlowLayout.LEFT, 10, 10); / 创建创建FlowLayout对象对象 getContentPane().setLayout(layout); / 设置布局管理器设置布局管理器 for (int i = 0; i 9; i+) / 创建创建9个按钮对象并放置在窗口的内容窗格中个按钮对象并放置在窗口的内容窗格中 label = Button # + (i + 1) + ; buttoni = new JButton(l
42、abel); getContentPane().add(buttoni); setSize(320, 150); / 设置窗口大小设置窗口大小 setVisible(true); / 将窗口设置为可见状态将窗口设置为可见状态 setResizable(false); / 将窗口设置为不可调节大小将窗口设置为不可调节大小 6.3.3 BorderLayout6.3.3 BorderLayout布局管理器布局管理器 BorderLayoutBorderLayout被称为边框布局管理器,被称为边框布局管理器, 它是它是JFrameJFrame内容窗格的默认布局管理器。内容窗格的默认布局管理器。这个布
43、局管理器的特点是将容器分为这个布局管理器的特点是将容器分为5 5个个部分,分别命名为部分,分别命名为NorthNorth、SouthSouth、WestWest、EastEast和和CenterCenter。 NorthSouthWestEastCenter BorderLayoutBorderLayout类提供了两种构造方法:类提供了两种构造方法: BorderLayout()BorderLayout() 无参数的构造方法,它将创建一个组件之间无参数的构造方法,它将创建一个组件之间水平和垂直间距均为零的布局管理器对象。水平和垂直间距均为零的布局管理器对象。 BorderLayout(int
44、hgap, int vgap)BorderLayout(int hgap, int vgap) 将创建一个组件之间水平间距为将创建一个组件之间水平间距为hgaphgap,垂直,垂直间距为间距为vgapvgap的布局管理器对象。的布局管理器对象。/ file name:JFrameClass.javaimport javax.swing.*;public class JFrameClass extends JFrame JButton North, South, West, East, Center; JFrameClass() super(Borderlayout布局管理器应用举例布局管理器应
45、用举例); North = new JButton(North); South = new JButton(South); West = new JButton(West); East = new JButton(East); Center = new JButton(Center); getContentPane().add(North, North); getContentPane().add(South, South); getContentPane().add(West, West); getContentPane().add(East, East); getContentPane()
46、.add(Center, Center); setSize(300, 200); setVisible(true); 6.3.4 GridLayout6.3.4 GridLayout布局管理器布局管理器 GridLayoutGridLayout被称为网格布局管理器,它被称为网格布局管理器,它是一种非常容易理解的布局管理器。这是一种非常容易理解的布局管理器。这种布局管理器的特点是将容器按照指定种布局管理器的特点是将容器按照指定的行数、列数分成大小相等的网格。可的行数、列数分成大小相等的网格。可以有两种将组件放入容器的方法:一是以有两种将组件放入容器的方法:一是使用默认的布局顺序,即按照从上到下使
47、用默认的布局顺序,即按照从上到下、从左到右的次序将组件放入容器的每、从左到右的次序将组件放入容器的每个网格中;二是采用个网格中;二是采用add()add()方法将组件放方法将组件放入指定的网格中。入指定的网格中。 GridLayout类提供了类提供了3种构造方法:种构造方法: GridLayout() 无参数的构造方法,它将创建在一行内放置所有组无参数的构造方法,它将创建在一行内放置所有组件的网格布局管理器对象,组件之间没有间隙。件的网格布局管理器对象,组件之间没有间隙。 GridLayout(int rows, int cols) 将创建将创建rows行、行、cols列的网格布局管理器对象,
48、组列的网格布局管理器对象,组件之间没有间隙。件之间没有间隙。 GridLayout(int rows,int cols,int hgap,int vgap) 将创建将创建rows行、行、cols列的网格布局管理器对象,组列的网格布局管理器对象,组件之间的水平间隙为件之间的水平间隙为hgap,垂直间隙为,垂直间隙为vgap。/ file name:JFrameClass.javaimport java.awt.*;import javax.swing.*;public class JFrameClass extends JFrame String str = 0, 1, 2, 3, 4, 5,
49、6, 7, 8, 9, +, -, *, /, =; JButton button; /声明按钮对象声明按钮对象 JPanel panel1, panel2; /声明面板容器对象声明面板容器对象 JTextField text; /声明声明TextField对象对象 public JFrameClass() super(GridLayout布局管理器举例布局管理器举例); / 设置顶层窗口标题设置顶层窗口标题 button = new JButton15; / 创建创建15个按钮对象个按钮对象 panel1 = new JPanel(); / 创建两个创建两个Panel对象对象 panel2
50、= new JPanel(); getContentPane().add(panel1, North); / 将面板容器放到内容窗格中将面板容器放到内容窗格中 getContentPane().add(panel2, Center); text = new JTextField(20); / 创建创建TextField对象且添加到对象且添加到panel1面板中面板中 panel1.add(text); panel2.setLayout(new GridLayout(5, 3); / 设置设置53的网格布局管理器的网格布局管理器 for (int i = 0; i 15; i+) / 创建创建1
51、5个按钮并放到个按钮并放到panel2面板中面板中 buttoni = new JButton(stri); panel2.add(buttoni); setSize(200, 300); / 设置窗口大小设置窗口大小 setVisible(true); / 将窗口设置为可见将窗口设置为可见 setResizable(false); / 将窗口大小设置为不可调节将窗口大小设置为不可调节 3 3种布局管理器的使用总结:种布局管理器的使用总结: (1) (1) 每种容器有一种默认的布局管理器,利用每种容器有一种默认的布局管理器,利用Java Java 设计应用程序界面时需要清楚这一点,以便设计应用
52、程序界面时需要清楚这一点,以便在没有为容器设置布局管理器时,了解摆放组件在没有为容器设置布局管理器时,了解摆放组件时采用的排列规则。时采用的排列规则。 (2) (2) 如果希望为某个容器设置特定的布局管理器如果希望为某个容器设置特定的布局管理器,首先需要创建相应的布局管理器对象,然后再,首先需要创建相应的布局管理器对象,然后再利用成员方法利用成员方法setLayout()setLayout()进行设置。进行设置。 (3) (3) 巧妙地设置布局管理器,并利用面板容器将巧妙地设置布局管理器,并利用面板容器将界面结构化是设计复杂应用程序界面的基本手段界面结构化是设计复杂应用程序界面的基本手段。尽管
53、在很多。尽管在很多JavaJava开发环境中提供了可视化界面开发环境中提供了可视化界面开发工具,但是,掌握程序代码的书写方法仍然开发工具,但是,掌握程序代码的书写方法仍然是十分重要的。是十分重要的。 6.4 Swing6.4 Swing组件组件 组件是应用程序界面中的重要元素,丰组件是应用程序界面中的重要元素,丰富的组件种类构成了强大的软件开发资富的组件种类构成了强大的软件开发资源。在程序开发过程中,根据不同的需源。在程序开发过程中,根据不同的需求,选择适合的组件是一件技术性很强求,选择适合的组件是一件技术性很强的工作,它关系到应用程序界面的美观的工作,它关系到应用程序界面的美观性、适用性、方
54、便性与安全性。性、适用性、方便性与安全性。 6.4.1 Swing6.4.1 Swing组件概述组件概述 在在SwingSwing中组件都是中组件都是JComponentJComponent类子类,类子类,这个类为子类提供了下列功能:这个类为子类提供了下列功能: 工具提示。可以调用工具提示。可以调用setToolTipText()setToolTipText()成员方法指定一个字符串,当光标停留成员方法指定一个字符串,当光标停留在某个组件上时,会在组件附近开辟一在某个组件上时,会在组件附近开辟一个小区域,并在其中显示这个字符串作个小区域,并在其中显示这个字符串作为提示信息。为提示信息。 绘画和
55、设置边框。可以调用绘画和设置边框。可以调用setBordersetBorder成成员方法为组件设置一个边框。如果希望员方法为组件设置一个边框。如果希望在组件内绘制图形,需要覆盖成员方法在组件内绘制图形,需要覆盖成员方法paintComponent()paintComponent()。控制显示外观。在每个组件的背后都有一个控制显示外观。在每个组件的背后都有一个ComponentUIComponentUI对象与之对应,由此完成组件的对象与之对应,由此完成组件的所有绘画、事件处理、定制尺寸任务。使用的所有绘画、事件处理、定制尺寸任务。使用的ComponentUIComponentUI对象与当前的显示
56、外观有关,而对象与当前的显示外观有关,而显示外观可以显示外观可以UIManager.setLookAndFeel()UIManager.setLookAndFeel()成成员方法进行设置。员方法进行设置。定制属性。可以将任何定制属性。可以将任何JComponentJComponent组件的一个组件的一个或多个属性进行组合。例如,一个布局管理器或多个属性进行组合。例如,一个布局管理器可以利用属性将多个约束条件组合在一起使其可以利用属性将多个约束条件组合在一起使其作用在一个组件上。作用在一个组件上。 支持拖拽功能。支持拖拽功能。JComponentJComponent类提供了设置拖拽类提供了设置拖
57、拽组件操作的组件操作的APIAPI。支持双缓冲。在刷新组件时会产生闪烁现象。支持双缓冲。在刷新组件时会产生闪烁现象。为了解决这个问题,提供了双缓冲技术,它可为了解决这个问题,提供了双缓冲技术,它可以使屏幕刷新更加平滑。在默认情况下,以使屏幕刷新更加平滑。在默认情况下,JPanelJPanel容器是双缓冲。容器是双缓冲。击键绑定。当用户按下键盘时,组件可以做出击键绑定。当用户按下键盘时,组件可以做出反应。例如,当一个按钮具有焦点时,按下反应。例如,当一个按钮具有焦点时,按下“空格键就等于在按钮上按下鼠标。外观自动空格键就等于在按钮上按下鼠标。外观自动地将按下和释放地将按下和释放“空格键绑定在一起
58、,并显空格键绑定在一起,并显示相应的外观。示相应的外观。 与与AWTAWT组件相比较,组件相比较, Swing Swing组件增加了下组件增加了下面几个新功能:面几个新功能: 按钮与标签组件不仅可以显示文本串,按钮与标签组件不仅可以显示文本串,还可以显示图标。还可以显示图标。 轻松地为大多数组件添加或更改边框。轻松地为大多数组件添加或更改边框。 可以通过调用成员方法或创建一个子类可以通过调用成员方法或创建一个子类对象改变对象改变SwingSwing组件的外观和行为。组件的外观和行为。 SwingSwing组件不仅可以为矩形,还可以为其组件不仅可以为矩形,还可以为其他形状。例如,创建一个圆形按钮
59、。他形状。例如,创建一个圆形按钮。6.4.2 6.4.2 静态文本组件静态文本组件 在在JavaJava中,静态文本组件是用标签组件中,静态文本组件是用标签组件实现的,这是一种不响应事件,主要用实现的,这是一种不响应事件,主要用于显示一些说明性描述信息的组件,它于显示一些说明性描述信息的组件,它的使用方式简单、应用频度高,是一种的使用方式简单、应用频度高,是一种在在GUIGUI应用程序界面设计中必不可少的组应用程序界面设计中必不可少的组件。在件。在SwingSwing中,用中,用JLabelJLabel类实现这个组类实现这个组件的功能,与件的功能,与AWTAWT中的标签组件相比较,中的标签组件
60、相比较,它的显示形式得到了扩展,不仅可以显它的显示形式得到了扩展,不仅可以显示文字,还可以显示图标。示文字,还可以显示图标。 在在JLabel类提供的构造方法:类提供的构造方法:JLabel()JLabel(Icon icon)JLabel(Icon icon,int horizontalAlignment)JLabel(String text)JLabel(String text, int horizontalAlignment)JLabel(String text, Icon icon, int horizontalAlignment) 使用标签组件的基本过程是:使用标签组件的基本过程是:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年监理工程师《目标控制(水利工程)》通关练习题库包【必刷】附答案详解
- 2025年云南三鑫职业技术学院单招职业技能测试题库有答案详解
- 真空电子器件装配工安全防护考核试卷含答案
- 工程地质调查员岗前实操掌握考核试卷含答案
- 打叶复烤设备操作工操作安全知识考核试卷含答案
- 2025年乡村人才面试题及答案
- 2025年县乡教师选调考试《教育学》真题及一套完整答案详解
- 2025年台州科技职业学院单招职业技能测试题库有完整答案详解
- 2026年酒馆合资合同(1篇)
- 2022年牙齿修复工程承包合同样本
- 广东省广州市越秀区第三中学2022-2023学年七年级下学期地理期中试卷(含答案)
- GB/T 44233.2-2024蓄电池和蓄电池组安装的安全要求第2部分:固定型电池
- 歌曲授权合同范本
- 园艺工人劳动合同
- 幼儿游学创业计划书
- 节能降耗培训课件
- 铁路大型养路机械构造与维修 课件 黑棣 6-4 配砟整形车
- 抖音员工号申请在职证明参考模板
- 基于1+X证书制度构建“岗课赛证”融通模式的典型案例
- 2023年年度全国注册土木工程师水利水电工程执业资格考试水工结构专业案例试卷上午
- 大一下学期高等数学期中考试试卷及答案
评论
0/150
提交评论