1、NCEPU图形用户界面设计图形用户界面设计2022年年12月月9日星期五日星期五NCEPUContents1.图形用户界面概述图形用户界面概述2.创建图形用户界面创建图形用户界面3.布局管理器布局管理器2022年年12月月9日星期五日星期五NCEPU图形用户界面概述图形用户界面概述 v之前我们所编写的之前我们所编写的Java程序都是在程序都是在DOS方式下运方式下运行的行的v而而Windows平台通过窗口式的图形界面实现人平台通过窗口式的图形界面实现人机对话,因此编写图形方式的机对话,因此编写图形方式的Java程序也是必须程序也是必须的的。2022年年12月月9日星期五日星期五NCEPUv 设
2、计一个图形用户界面,界面如图所示:设计一个图形用户界面,界面如图所示:例例1v所需要的知识点所需要的知识点图形用户界面基础知识图形用户界面基础知识布局管理器的使用布局管理器的使用2022年年12月月9日星期五日星期五NCEPU多行文本框图形用户界面的组成图形用户界面的组成组件单选按钮单行文本框标签复选按钮按钮组合框窗口面板容器2022年年12月月9日星期五日星期五NCEPU图形用户界面设计概述图形用户界面设计概述 图形用户界面(图形用户界面(Graphics User Interface,GUI)是程序与用户交互的方式,利用它系统是程序与用户交互的方式,利用它系统可以接收用户的输入并向用户输出
3、程序运行的可以接收用户的输入并向用户输出程序运行的结果。结果。2022年年12月月9日星期五日星期五NCEPUGUI支持包支持包v java.awt包包:java.awt包中提供了大量的进行包中提供了大量的进行GUI设计所设计所使用的类和接口,是使用的类和接口,是Java语言进行语言进行GUI程序设计的基础。程序设计的基础。v javax.swing包包:swing是由是由100%纯纯Java实现的,没有本实现的,没有本地代码,不依赖操作系统的支持,地代码,不依赖操作系统的支持,它的出现使得它的出现使得Java的图形的图形用户界面上了一个台阶。用户界面上了一个台阶。2022年年12月月9日星期
4、五日星期五NCEPU抽象窗口工具集抽象窗口工具集AWT vAWT是是Java基础类库基础类库(JFC,Java Foundation Class)的一部分,它为大规模的的一部分,它为大规模的GUI开发提供了开发提供了丰富的基础结构。丰富的基础结构。vAWT的核心软件包的核心软件包java.awtvjava.awt主要由组件类主要由组件类(Component)、事件类事件类(Event)、布局类布局类(FlowLayout等等)、菜单类、菜单类(MenuComponet)等组成。等组成。2022年年12月月9日星期五日星期五NCEPU抽象窗口工具集抽象窗口工具集AWT java.awt包中的主要
5、类包中的主要类 以及组件类的继承关系以及组件类的继承关系颜颜色色类类字字体体类类组组件件类类布布局局类类复选复选框组框组类类图图像像类类事事件件类类菜单菜单组件组件类类图图形形类类java.lang.Object标标签签类类按按钮钮类类容容器器类类复选复选框框类类滚动滚动条条类类选择选择框框类类列表列表框框类类文本文本组件组件类类画画布布类类面板类面板类窗口类窗口类框架类框架类对话框类对话框类文件对话框类文件对话框类java.applet.Applet组件组件(component)是是具有一定功能、能够产生事件的具有一定功能、能够产生事件的 部件的统称。部件的统称。例如:窗口,以及窗口上的文本
6、框、按钮、例如:窗口,以及窗口上的文本框、按钮、复选框、列表框、菜单等都是组件复选框、列表框、菜单等都是组件组件类是组件类是Object的子类,是一个抽象类,是所有组件的子类,是一个抽象类,是所有组件的超类,它为其他子类定义了许多共同的属性,的超类,它为其他子类定义了许多共同的属性,如:位置、大小、字体、颜色等。如:位置、大小、字体、颜色等。容器容器(container)是是一组特殊的组件一组特殊的组件,它能容纳其他组件它能容纳其他组件容器类是组件类的子类容器类是组件类的子类由于容器是组件,所以容器之上还可以再放置其他容由于容器是组件,所以容器之上还可以再放置其他容器,这样就可以创建出复杂的界
7、面器,这样就可以创建出复杂的界面Java中有两种主要容器:窗口和面板中有两种主要容器:窗口和面板窗口窗口(Window)是可以自由移动的,不依赖其他容器是可以自由移动的,不依赖其他容器而存在的容器而存在的容器面板面板(Panel)与窗口类似,但不能独立存在,必须包含与窗口类似,但不能独立存在,必须包含在另外一个容器里,如包含在在另外一个容器里,如包含在Frame或或Web中中窗口窗口(Window)有两个主要组件:框架和对话框有两个主要组件:框架和对话框在在Java应用程序中,一般独立应用程序主要使用框架应用程序中,一般独立应用程序主要使用框架(Frame)做做容器,在框架上通过放置面板容器,
8、在框架上通过放置面板(Panel)来控制图形界面的布局。来控制图形界面的布局。如果应用到浏览器中,则主要使用面板的一个子类如果应用到浏览器中,则主要使用面板的一个子类Applet来做容器,它能嵌入浏览器运行。来做容器,它能嵌入浏览器运行。2022年年12月月9日星期五日星期五NCEPU第一节 抽象窗口工具集AWT java.awt包中的主要类 以及组件类的继承关系颜颜色色类类字字体体类类组组件件类类布布局局类类复选复选框组框组类类图图像像类类事事件件类类菜单菜单组件组件类类图图形形类类java.lang.Object标标签签类类按按钮钮类类容容器器类类复选复选框框类类滚动滚动条条类类选择选择框
9、框类类列表列表框框类类文本文本组件组件类类画画布布类类面板类面板类窗口类窗口类框架类框架类对话框类对话框类文件对话框类文件对话框类java.applet.AppletPanelFrameContainerComponent2022年年12月月9日星期五日星期五NCEPUSwing的类层次结构的类层次结构v Swing组件都是组件都是AWT的的Container类的直接子类或间类的直接子类或间接子类。接子类。2022年年12月月9日星期五日星期五NCEPUSwing的类层次结构的类层次结构ObjectComponentJFrameContainerWindowFrameDialogJDialog
10、JTextJComboBoxJLabelJListJMenuBarJOptionPaneJPanelJScrollBarAbstractButtonJToggleButtonJMenuItemJButtonJCheckBoxJRadioButtonJComponentJMenuAppletJApplet2022年年12月月9日星期五日星期五NCEPU创建可视化界面的一般步骤创建可视化界面的一般步骤选择外观选择外观布局管理布局管理 添加组件添加组件 事件处理事件处理 创建容器创建容器2022年年12月月9日星期五日星期五NCEPUSwing外观外观vSwing采用采用MVC的设计范式的设计范式v
11、Swing外观感觉采用可插入的外观感觉(外观感觉采用可插入的外观感觉(Pluggable Look and Feel,PL&F)。)。使得程序在一个平台上运行使得程序在一个平台上运行时能够有不同的外观。时能够有不同的外观。表示界表示界面数据面数据刷新显刷新显示内容示内容接收用接收用户动作户动作控制器控制器视图视图模型模型2022年年12月月9日星期五日星期五NCEPUvMetal风格风格 Swing外观外观 2022年年12月月9日星期五日星期五NCEPUvMotif风格风格 Swing外观外观 2022年年12月月9日星期五日星期五NCEPUvWindows风格风格 Swing外观外观 20
12、22年年12月月9日星期五日星期五NCEPUimport javax.swing.*;import java.awt.event.*;public class HelloWorldSwing public static void main(String args)JFrame frame=new JFrame(HelloWorldSwing);final JLabel label=new JLabel(Hello World!);frame.getContentPane().add(label);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLO
13、SE);frame.setSize(200,70);frame.setVisible(true);基于Swing的的GUI构建方法构建方法 2022年年12月月9日星期五日星期五NCEPU(1)引入引入Swing包及其他程序包包及其他程序包import javax.swing.*;import java.awt.event.*;(2)设置外观风格设置外观风格UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName();(3)创建并设置窗口容器创建并设置窗口容器(4)创建与添加创建与添加Swing组件组件(5)
14、显示顶层容器显示顶层容器基于Swing的的GUI构建方法构建方法 2022年年12月月9日星期五日星期五NCEPU图形用户界面设计概述图形用户界面设计概述vjava程序的程序的GUI设计主要包括下述三个概念:设计主要包括下述三个概念:组件组件Component 容器容器Container 布局管理器布局管理器-LayoutManager2022年年12月月9日星期五日星期五NCEPUSwing 中的容器中的容器v容器分两类:容器分两类:-顶级容器:一般是一个顶层窗口(框架)。顶级容器:一般是一个顶层窗口(框架)。-中间容器:需要包含在顶层容器中使用的容器。中间容器:需要包含在顶层容器中使用的容
15、器。v顶级容器顶级容器 JFrame:用于框架窗口的类,应用程序至少使用一用于框架窗口的类,应用程序至少使用一个框架窗口。个框架窗口。JDialog:用于对话框的类。用于对话框的类。JApplet:用于使用用于使用 Swing Swing 组件的组件的Java AppletJava Applet的类的类。v中间容器中间容器 JPanel:面板,是最灵活、最常用的中间容器。面板,是最灵活、最常用的中间容器。JScrollPane:与与JPanelJPanel类似,但还可在大的组件或类似,但还可在大的组件或可扩展组件周围提供滚动条。可扩展组件周围提供滚动条。JTabbedPane:包含多个组件,但
16、一次只显示一个包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。组件。用户可在组件之间方便地切换。JToolBar:按行或列排列一组组件(通常是按钮)。按行或列排列一组组件(通常是按钮)。2022年年12月月9日星期五日星期五NCEPUSwing 容器组件容器组件主窗口主窗口Swing 应用程序应用程序创建容器设置容器大小(对框架及面板而言)设置容器可见度(对框架及面板而言)创建顶层容器创建顶层容器顶层容器(每个应用程序中至少有一个)内容面板主要显示区域,包含 GUI 中的可视组件2022年年12月月9日星期五日星期五NCEPUv 在在Java中,顶层窗口称为框架。中,顶层窗口称
17、为框架。窗口有边界、标题、窗口有边界、标题、关闭按钮等。关闭按钮等。注意:每个图形用户界面应用程序必须有一个框架注意:每个图形用户界面应用程序必须有一个框架框架框架 2022年年12月月9日星期五日星期五NCEPU框架框架 v框架框架(Frame)类是窗口类是窗口(Window)类的子类,它类的子类,它是一种带标题框并且可以改变大小的窗口。是一种带标题框并且可以改变大小的窗口。v框架类的许多方法是从它的父类框架类的许多方法是从它的父类Window或更上或更上层的类层的类Container和和Component继承过来的继承过来的v下面介绍框架类的构造方法和常用方法下面介绍框架类的构造方法和常用
18、方法2022年年12月月9日星期五日星期五NCEPU框架框架 v框架框架(Frame)类的构造方法类的构造方法 public Frame()public Frame(String title)其中,其中,title指定框架的标题指定框架的标题2022年年12月月9日星期五日星期五NCEPU框架框架 v组件组件(Component)类方法类方法 public void setSize(int width,int height)设置组件的宽度和高度设置组件的宽度和高度 public void setVisible(boolean b)设置组件是否显示设置组件是否显示 public void set
19、Location(int x,int y)设置组件的位置设置组件的位置2022年年12月月9日星期五日星期五NCEPU框架框架 v框架框架(Frame)类方法类方法 public void setTitle(String title)设置或修改框架的标题设置或修改框架的标题 public String getTitle()获取框架的标题获取框架的标题 Public void setBackground(Color c)设置框架的背景颜色设置框架的背景颜色2022年年12月月9日星期五日星期五NCEPU框架框架 v框架框架是一个带有标题框的窗口,窗口的大小可以是一个带有标题框的窗口,窗口的大小可
20、以改变。改变。v框架在实例化时框架在实例化时默认为是不可见的默认为是不可见的,最小化的,最小化的,必须通过必须通过setSize方法来设定框架的大小,并使方法来设定框架的大小,并使用用setVisible(true)使框架可见。使框架可见。2022年年12月月9日星期五日星期五NCEPU第二节第二节 框架框架import java.awt.*;public class UserLogin public static void main(String args)Frame f=new Frame(User Login);f.setSize(280,150);f.setBackground(Col
21、or.LIGHT_GRAY);f.setVisible(true);输出为:import java.awt.*;public class TestMultiFramepublic static void main(String args)MyFrame f1=new MyFrame(100,100,200,200,Color.BLUE);MyFrame f2=new MyFrame(300,100,200,200,Color.YELLOW);MyFrame f3=new MyFrame(100,300,200,200,Color.GREEN);MyFrame f4=new MyFrame(30
22、0,300,200,200,Color.MAGENTA);class MyFrame extends Framestatic int id=0;MyFrame(int x,int y,int w,int h,Color color)super(MyFrame+(+id);setBackground(color);setLayout(null);setBounds(x,y,w,h);setVisible(true);2022年年12月月9日星期五日星期五NCEPU与与AWT组件不同组件不同,Swing组件不能直接添加到顶层容器中,组件不能直接添加到顶层容器中,它必须添加到一个与它必须添加到一个与
23、Swing顶层容器相关联的内容面板顶层容器相关联的内容面板(content pane)上。上。getContentPane()JFrame的使用的使用2022年年12月月9日星期五日星期五NCEPUv 对对JFrame添加组件有两种方式:添加组件有两种方式:(1)用用getContentPane()方法获得方法获得JFrame的内容面板,再的内容面板,再对其加入组件:对其加入组件:frame.getContentPane().add(childComponent)如何添加组件如何添加组件2022年年12月月9日星期五日星期五NCEPUimport javax.swing.*;import ja
24、va.awt.event.*;public class HelloWorldSwing public static void main(String args)JFrame frame=new JFrame(HelloWorldSwing);final JLabel label=new JLabel(Hello World!);frame.getContentPane().add(label);frame.setSize(200,70);frame.setVisible(true);2022年年12月月9日星期五日星期五NCEPUJFrame的使用的使用v 为了在选择框架的关闭按钮时能退出程序
25、,应添加为了在选择框架的关闭按钮时能退出程序,应添加WindowListener监听器或书写下列代码:监听器或书写下列代码:frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);2022年年12月月9日星期五日星期五NCEPUJFrame的使用的使用v组件组件(Component)类方法类方法 public void setLocation(int x,int y)设置组件的位置设置组件的位置2022年年12月月9日星期五日星期五NCEPU第二节第二节 框架框架import javax.swing.*;public class JFrameD
26、emo public static void main(String args)JFrame fr=new JFrame(学生信息管理系统学生信息管理系统);System.out.println(“已经创建已经创建JFrame实例实例);fr.setSize(400,300);System.out.println(“调用了调用了setSize();fr.setLocation(200,200);fr.setVisible(true);System.out.println(“调用了调用了setVisible();fr.setDefaultCloseOperation(JFrame.EXIT_ON
27、_CLOSE);2022年年12月月9日星期五日星期五NCEPU面板面板 v面板面板(JPanel)与框架类似,也与框架类似,也是一种容器,可以是一种容器,可以容纳其他容纳其他GUI组件。组件。v与框架不同的是,与框架不同的是,面板没有标题,不能独立存在面板没有标题,不能独立存在,实例化以后必须使用实例化以后必须使用Container类的类的add方法装方法装入到入到Window对象或对象或Frame对象中对象中,这样它才可,这样它才可见。见。2022年年12月月9日星期五日星期五NCEPUSwing常用的容器常用的容器JPanelv JPanel面板是一种添加到其他容器使用的容器组件。面板是
28、一种添加到其他容器使用的容器组件。JPanel的构造方法:的构造方法:public JPanel()public JPanel(LayoutManager layout)v JPanel可指定边界,可用可指定边界,可用JComponent类的类的setBorder()方法设置边界。其用法如下:方法设置边界。其用法如下:public void setBorder(Border border)2022年年12月月9日星期五日星期五NCEPU第二节第二节 框架框架import java.awt.*;import javax.swing.*;public class FrameWithPanel ex
29、tends JFrame public static void main(String args)FrameWithPanel fr=new FrameWithPanel(Hello!);fr.setSize(200,200);fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel pan=new JPanel();pan.setSize(200,100);2022年年12月月9日星期五日星期五NCEPU第二节第二节 框架框架 pan.setBackground(Color.yellow);pan.setLayout(new GridL
30、ayout(2,1);pan.add(new JButton(确定);fr.setContentPane(pan);fr.setVisible(true);public FrameWithPanel(String str)super(str);2022年年12月月9日星期五日星期五NCEPU布局管理器布局管理器(LayoutManager)q所谓布局,就是各组件在容器中如何摆放。q为了实现跨平台的特性并获得动态的布局效果,Java将 容器内的所有组件安排给“布局管理器”负责管理。q布局管理器管理当窗口移动或调整大小后组件如何变化 等功能。2022年年12月月9日星期五日星期五NCEPUv 布局
31、管理器的分类布局管理器的分类 FlowLayout(流式布局)(流式布局):Panel和和Applet的缺省布局管理器的缺省布局管理器 BorderLayout(边界布局(边界布局):JDialog和和JFrame的缺省布局管理器的缺省布局管理器 GridLayout(网格布局)(网格布局)GridBagLayout(网格组布局)(网格组布局)CardLayout(卡片布局)(卡片布局)BoxLayout(箱式布局)箱式布局)SpringLayout(弹簧布局)(弹簧布局)v 每个容器都有每个容器都有缺省的布局管理器缺省的布局管理器。在没有设置新的布局前,在容器中。在没有设置新的布局前,在容器
32、中添加组件都按照该容器的缺省布局排列。添加组件都按照该容器的缺省布局排列。v 可通过可通过setLayout(LayoutManager m)方法为容器设置新布局。方法为容器设置新布局。布局管理器布局管理器(LayoutManager)2022年年12月月9日星期五日星期五NCEPU布局管理器布局管理器 FlowLayout(流式布局)(流式布局)将组件逐个放到容器的一行上将组件逐个放到容器的一行上一行放满后就重新起一个新行一行放满后就重新起一个新行 BorderLayout(边界布局)(边界布局)容器被划分为东容器被划分为东(East)、南南(South)、西西(West)、北北(North
33、)、中中(Center)2022年年12月月9日星期五日星期五NCEPU布局管理器布局管理器 GridLayout(网格式布局)网格式布局)将容器分为大小相等的若干行乘若干列的网格,将容器分为大小相等的若干行乘若干列的网格,组件从左至右,从上到下放入网格中,每个组件占一组件从左至右,从上到下放入网格中,每个组件占一格(表格式)格(表格式)CardLayout(卡片式布局)卡片式布局)将容器中的组件处理成一组卡片,每一时刻只显将容器中的组件处理成一组卡片,每一时刻只显示一张卡片,可以在卡片间切换示一张卡片,可以在卡片间切换2022年年12月月9日星期五日星期五NCEPUFlowLayout布局管
34、理器布局管理器 FlowLayout布局管理器布局管理器v FlowLayout是是Panel类的默认布局管理器类的默认布局管理器v 布局方式:布局方式:将组件逐个地放在容器的一行上,一行放满就另起一将组件逐个地放在容器的一行上,一行放满就另起一个新行。个新行。其中,一行的长度取决于容器的宽度其中,一行的长度取决于容器的宽度2022年年12月月9日星期五日星期五NCEPUFlowLayout布局管理器布局管理器 FlowLayout布局管理器布局管理器v 构造方法:构造方法:public FlowLayout();public FlowLayout(int align);public Flow
35、Layout(int align,int hgap,int vgap);其中,其中,align表示对齐方式,表示对齐方式,hgap和和vagp表示组件的水表示组件的水平和垂直间距,单位是像素。平和垂直间距,单位是像素。若没有指定若没有指定align,则默认让组件居中摆放则默认让组件居中摆放 align的取值为常量:的取值为常量:FlowLayout.LEFT,FlowLayout.RIGHT 和和 FlowLayout.CENTER 例如:例如:new FlowLayout(FlowLayout.LEFT)2022年年12月月9日星期五日星期五NCEPUFlowLayout布局管理器布局管理器
36、 FlowLayout布局管理器布局管理器v 设置设置FlowLayout 布局布局FlowLayout flow=new FlowLayout();Frame fr=new Frame();fr.setLayout(flow);v 由于一个容器只要设置了布局通常就不会再改变,因此上由于一个容器只要设置了布局通常就不会再改变,因此上面的语句可以简化成:面的语句可以简化成:fr.setLayout(new FlowLayout();2022年年12月月9日星期五日星期五NCEPUFlowLayout布局管理器布局管理器 FlowLayout布局管理器布局管理器v 可以设置框架可以设置框架fr为组
37、件左对齐的为组件左对齐的FlowLayout布局:布局:fr.setLayout(new FlowLayout(FlowLayout.LEFT);v 还可以设置框架还可以设置框架fr为组件左对齐的为组件左对齐的FlowLayout布局,并且布局,并且组件的水平间距为组件的水平间距为20像素,垂直间距为像素,垂直间距为40像素:像素:fr.setLayout(new FlowLayout(FlowLayout.LEFT,20,40);2022年年12月月9日星期五日星期五NCEPUimport java.awt.*;import javax.swing.*;class FlowLayoutDem
38、o extends JFrame JButton jb1,jb2,jb3,jb4,jb5;public FlowLayoutDemo(String title)super(title);void init()this.setVisible(true);this.setSize(300,200);Container c=this.getContentPane();jb1=new JButton(第一个按钮);jb2=new JButton(第二个按钮);jb3=new JButton(第三个按钮);jb4=new JButton(第四个按钮);jb5=new JButton(第五个按钮);c.s
39、etLayout(new FlowLayout();/设置布局管理器 c.add(jb1);c.add(jb2);c.add(jb3);c.add(jb4);c.add(jb5);public static void main(String args)FlowLayoutDemo f=new FlowLayoutDemo(FowLayoutDemo);f.init();FlowLayout使用示例使用示例2022年年12月月9日星期五日星期五NCEPUBorderLayout布局管理器布局管理器 BorderLayout布局管理器布局管理器v BorderLayout是是Frame类和类和Di
40、alog类的默认布局管理器类的默认布局管理器v 布局方式:布局方式:容器被划分为东容器被划分为东(East)、南南(South)、西西(West)、北北(North)、中中(Center)五个区域五个区域v 变化规律为:组件的相对位置不变,大小发生变化。变化规律为:组件的相对位置不变,大小发生变化。2022年年12月月9日星期五日星期五NCEPU水平拉宽我们可以看到:南、北、中控件大小会有变化,水平拉宽我们可以看到:南、北、中控件大小会有变化,东、西控件大小不变化东、西控件大小不变化。BorderLayout布局管理器布局管理器 BorderLayout布局管理器布局管理器2022年年12月月
41、9日星期五日星期五NCEPU上下拉长可以看到:东、西、中控件大小会有变化,南、上下拉长可以看到:东、西、中控件大小会有变化,南、北控件大小不变化北控件大小不变化。BorderLayout布局管理器布局管理器 BorderLayout布局管理器布局管理器2022年年12月月9日星期五日星期五NCEPUBorderLayout布局管理器布局管理器 BorderLayout布局管理器布局管理器v 构造方法:构造方法:public BorderLayout();public BorderLayout(int hgap,int vgap);其中,其中,hgap和和vagp表示组件的水平和垂直间距,单位是
42、表示组件的水平和垂直间距,单位是像素,默认为像素,默认为02022年年12月月9日星期五日星期五NCEPUBorderLayout布局管理器布局管理器 BorderLayout布局管理器布局管理器v Container容器类放置组件的方法:容器类放置组件的方法:public Component add(Component comp,int index)其中,其中,index 指明组件放置的区域,分别为:指明组件放置的区域,分别为:BorderLayout.EAST 或或 East BorderLayout.WEST 或或 West BorderLayout.SOUTH 或或 South Bor
43、derLayout.NORTH 或或 North BorderLayout.CENTER 或或 Center 2022年年12月月9日星期五日星期五NCEPUimport java.awt.*;import javax.swing.*;class BLExample extends JFrame public BLExample(String title)super(title);Container contentPane=getContentPane();contentPane.setLayout(new BorderLayout(2,2);contentPane.add(BorderLay
44、out.NORTH,new JButton(North);contentPane.add(BorderLayout.SOUTH,new JButton(South);contentPane.add(BorderLayout.EAST,new JButton(East);contentPane.add(BorderLayout.WEST,new JButton(West);contentPane.add(BorderLayout.CENTER,new JButton(Center);public static void main(String args)BLExample frame=new B
45、LExample(Example);frame.setDefaultCloseOperation(EXIT_ON_CLOSE);frame.setSize(500,300);frame.setVisible(true);2022年年12月月9日星期五日星期五NCEPU第四节第四节 布局管理器布局管理器import javax.swing.*;public class ExGui2 private JFrame f;private JButton be,bs,bw,bn,bc;public static void main(String args)ExGui2 that=new ExGui2()
46、;that.go();2022年年12月月9日星期五日星期五NCEPU第四节第四节 布局管理器布局管理器void go()f=new JFrame(Border Layout);be=new JButton(East);bs=new JButton(South);bw=new JButton(West);bn=new JButton(North);bc=new JButton(Center);f.add(be,East);f.add(bs,South);f.add(bw,West);f.add(bn,North);f.add(bc,Center);f.setSize(350,200);f.se
47、tVisible(true);输出为:2022年年12月月9日星期五日星期五NCEPU第四节第四节 布局管理器布局管理器void go()f=new JFrame(Border Layout);be=new JButton(East);bs=new JButton(South);bw=new JButton(West);bn=new JButton(North);bc=new JButton(Center);f.add(be,East);f.add(bs,South);f.add(bw,West);f.add(bn,North);f.add(bc,Center);f.setSize(350,2
48、00);f.setVisible(true);void go()f=new JFrame(Border Layout);be=new JButton(East);bs=new JButton(South);bw=new JButton(West);bn=new JButton(North);bc=new JButton(Center);f.add(be,BorderLayout.EAST);f.add(bs,BorderLayout.SOUTH);f.add(bw,BorderLayout.WEST);f.add(bn,BorderLayout.NORTH);f.add(bc,BorderLa
49、yout.CENTER);f.setSize(350,200);f.setVisible(true);Frame类类默认的布局管理器就是默认的布局管理器就是BorderLayout因此不用再使用因此不用再使用f.setLayout(new BorderLayout()区域的默认值是区域的默认值是BorderLayout.CENTER因此因此 f.add(bc,BorderLayout.CENTER)与与f.add(bc)是等价的。是等价的。若将多个组件放在了同一个区域内,最后一个放入若将多个组件放在了同一个区域内,最后一个放入的组件将覆盖前面的组件的组件将覆盖前面的组件2022年年12月月9日
50、星期五日星期五NCEPU第四节第四节 布局管理器布局管理器void go()f=new JFrame(Border Layout);be=new JButton(East);bs=new JButton(South);bw=new JButton(West);bn=new JButton(North);bc=new JButton(Center);f.add(be,East);f.add(bs,East);f.add(bw,North);f.add(bn,North);f.add(bc);f.setSize(350,200);f.setVisible(true);若将多个组件放在了同一个区域内