版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图形用户界面设计图形用户界面设计Contents1.图形用户界面概述2.创建图形用户界面3.布局管理器NCEPUContents1.图形用户界面概述2.创建图形用户界面3.2图形用户界面概述
之前我们所编写的Java程序都是在DOS方式下运行的而Windows平台通过窗口式的图形界面实现人机对话,因此编写图形方式的Java程序也是必须的。NCEPU图形用户界面概述之前我们所编写的Java程序都是在DOS方3设计一个图形用户界面,界面如图所示:
例1所需要的知识点图形用户界面基础知识布局管理器的使用NCEPU设计一个图形用户界面,界面如图所示:例1所需要的知识点NCE4多行文本框图形用户界面的组成组件单选按钮单行文本框标签复选按钮按钮组合框窗口面板容器NCEPU多行文本框图形用户界面的组成组件单选按钮单行文本框标签复选按5图形用户界面设计概述图形用户界面(GraphicsUserInterface,GUI)是程序与用户交互的方式,利用它系统可以接收用户的输入并向用户输出程序运行的结果。NCEPU图形用户界面设计概述图形用户界面(Graphics6GUI支持包java.awt包:java.awt包中提供了大量的进行GUI设计所使用的类和接口,是Java语言进行GUI程序设计的基础。javax.swing包:swing是由100%纯Java实现的,没有本地代码,不依赖操作系统的支持,它的出现使得Java的图形用户界面上了一个台阶。NCEPUGUI支持包java.awt包:java.awt包中提供了7抽象窗口工具集AWTAWT是Java基础类库(JFC,JavaFoundationClass)的一部分,它为大规模的GUI开发提供了丰富的基础结构。AWT的核心软件包java.awtjava.awt主要由组件类(Component)、事件类(Event)、布局类(FlowLayout等)、菜单类(MenuComponet)等组成。NCEPU抽象窗口工具集AWTAWT是Java基础类库(JFC,J8抽象窗口工具集AWT
java.awt包中的主要类以及组件类的继承关系颜色类字体类组件类布局类复选框组类图像类事件类菜单组件类图形类java.lang.Object标签类按钮类容器类复选框类滚动条类选择框类列表框类文本组件类画布类面板类窗口类框架类对话框类文件对话框类java.applet.Applet组件(component)是具有一定功能、能够产生事件的
部件的统称。 例如:窗口,以及窗口上的文本框、按钮、
复选框、列表框、菜单等都是组件组件类是Object的子类,是一个抽象类,是所有组件
的超类,它为其他子类定义了许多共同的属性,
如:位置、大小、字体、颜色等。
容器(container)是一组特殊的组件,它能容纳其他组件容器类是组件类的子类由于容器是组件,所以容器之上还可以再放置其他容
器,这样就可以创建出复杂的界面Java中有两种主要容器:窗口和面板窗口(Window)是可以自由移动的,不依赖其他容器
而存在的容器面板(Panel)与窗口类似,但不能独立存在,必须包含
在另外一个容器里,如包含在Frame或Web中窗口(Window)有两个主要组件:框架和对话框在Java应用程序中,一般独立应用程序主要使用框架
(Frame)做容器,在框架上通过放置面板(Panel)
来控制图形界面的布局。如果应用到浏览器中,则主要使用面板的一个子类
Applet来做容器,它能嵌入浏览器运行。NCEPU抽象窗口工具集AWTjava.awt包中的主要类颜字组布复9第一节
抽象窗口工具集AWT
java.awt包中的主要类以及组件类的继承关系颜色类字体类组件类布局类复选框组类图像类事件类菜单组件类图形类java.lang.Object标签类按钮类容器类复选框类滚动条类选择框类列表框类文本组件类画布类面板类窗口类框架类对话框类文件对话框类java.applet.AppletPanelFrameContainerComponentNCEPU第一节抽象窗口工具集AWTjava.awt包中的主要类颜10Swing的类层次结构Swing组件都是AWT的Container类的直接子类或间接子类。
NCEPUSwing的类层次结构Swing组件都是AWT的Contai11Swing的类层次结构ObjectComponentJFrameContainerWindowFrameDialogJDialogJTextJComboBoxJLabelJListJMenuBarJOptionPaneJPanelJScrollBarAbstractButtonJToggleButtonJMenuItemJButtonJCheckBoxJRadioButtonJComponentJMenuAppletJAppletNCEPUSwing的类层次结构ObjectComponentJFra12创建可视化界面的一般步骤选择外观布局管理添加组件事件处理
创建容器NCEPU创建可视化界面的一般步骤选择外观布局管理添加组件事件处理13Swing外观Swing采用MVC的设计范式Swing外观感觉采用可插入的外观感觉(PluggableLookandFeel,PL&F)。使得程序在一个平台上运行时能够有不同的外观。表示界面数据刷新显示内容接收用户动作控制器视图模型NCEPUSwing外观Swing采用MVC的设计范式Swing外观感14Metal风格Swing外观
NCEPUMetal风格Swing外观NCEPU15Motif风格Swing外观
NCEPUMotif风格Swing外观NCEPU16Windows风格Swing外观
NCEPUWindows风格Swing外观NCEPU17importjavax.swing.*;importjava.awt.event.*;publicclassHelloWorldSwing{publicstaticvoidmain(String[]args){JFrameframe=newJFrame("HelloWorldSwing");finalJLabellabel=newJLabel("HelloWorld!");frame.getContentPane().add(label);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(200,70);frame.setVisible(true);}}基于Swing的GUI构建方法
NCEPUimportjavax.swing.*;基于Swing18(1)引入Swing包及其他程序包importjavax.swing.*;importjava.awt.event.*;(2)设置外观风格UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());(3)创建并设置窗口容器(4)创建与添加Swing组件(5)显示顶层容器基于Swing的GUI构建方法
NCEPU(1)引入Swing包及其他程序包基于Swing的GUI构建19图形用户界面设计概述java程序的GUI设计主要包括下述三个概念:组件—Component容器—Container布局管理器--LayoutManagerNCEPU图形用户界面设计概述java程序的GUI设计主要包括下述三个20Swing中的容器容器分两类:
-顶级容器:一般是一个顶层窗口(框架)。
-中间容器:需要包含在顶层容器中使用的容器。顶级容器JFrame:用于框架窗口的类,应用程序至少使用一个框架窗口。JDialog:用于对话框的类。JApplet:用于使用Swing组件的JavaApplet的类。中间容器JPanel:面板,是最灵活、最常用的中间容器。JScrollPane:与JPanel类似,但还可在大的组件或可扩展组件周围提供滚动条。JTabbedPane:包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。JToolBar:按行或列排列一组组件(通常是按钮)。NCEPUSwing中的容器容器分两类:NCEPU21Swing容器组件主窗口Swing应用程序创建容器设置容器大小(对框架及面板而言)设置容器可见度(对框架及面板而言)创建顶层容器顶层容器(每个应用程序中至少有一个)内容面板主要显示区域,包含
GUI中的可视组件NCEPUSwing容器组件主窗口Swing应用程序创建容器设置容22在Java中,顶层窗口称为框架。窗口有边界、标题、关闭按钮等。注意:每个图形用户界面应用程序必须有一个框架框架NCEPU在Java中,顶层窗口称为框架。窗口有边界、标题、关闭按钮等23框架
框架(Frame)类是窗口(Window)类的子类,它是一种带标题框并且可以改变大小的窗口。框架类的许多方法是从它的父类Window或更上层的类Container和Component继承过来的下面介绍框架类的构造方法和常用方法NCEPU框架框架(Frame)类是窗口(Window)类的子类,它24框架
框架(Frame)类的构造方法publicFrame()publicFrame(Stringtitle)
其中,title指定框架的标题NCEPU框架框架(Frame)类的构造方法NCEPU25框架
组件(Component)类方法publicvoidsetSize(intwidth,intheight)
设置组件的宽度和高度publicvoidsetVisible(booleanb)
设置组件是否显示publicvoidsetLocation(intx,inty)
设置组件的位置NCEPU框架组件(Component)类方法NCEPU26框架
框架(Frame)类方法publicvoidsetTitle(Stringtitle)
设置或修改框架的标题publicStringgetTitle()
获取框架的标题PublicvoidsetBackground(Colorc)
设置框架的背景颜色NCEPU框架框架(Frame)类方法NCEPU27框架
框架是一个带有标题框的窗口,窗口的大小可以改变。框架在实例化时默认为是不可见的,最小化的,必须通过setSize方法来设定框架的大小,并使用setVisible(true)使框架可见。NCEPU框架框架是一个带有标题框的窗口,窗口的大小可以改变。NCE28第二节
框架importjava.awt.*; publicclassUserLogin{
publicstaticvoidmain(Stringargs[]){ Framef=newFrame("UserLogin"); f.setSize(280,150);
f.setBackground(Color.LIGHT_GRAY); f.setVisible(true); }}输出为:NCEPU第二节框架importjava.awt.*; 输出为29importjava.awt.*;publicclassTestMultiFrame{ publicstaticvoidmain(Stringargs[]){ MyFramef1=newMyFrame(100,100,200,200,Color.BLUE); MyFramef2=newMyFrame(300,100,200,200,Color.YELLOW); MyFramef3=newMyFrame(100,300,200,200,Color.GREEN); MyFramef4=newMyFrame(300,300,200,200,Color.MAGENTA); }}NCEPUimportjava.awt.*;NCEPU30classMyFrameextendsFrame{ staticintid=0; MyFrame(intx,inty,intw,inth,Colorcolor){ super("MyFrame"+(++id)); setBackground(color); setLayout(null); setBounds(x,y,w,h); setVisible(true); } }NCEPUclassMyFrameextendsFrame{NC31与AWT组件不同,Swing组件不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(contentpane)上。getContentPane()JFrame的使用NCEPU与AWT组件不同,Swing组件不能直接添加到顶层容器中,它32对JFrame添加组件有两种方式:(1)用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)如何添加组件NCEPU对JFrame添加组件有两种方式:如何添加组件NCEPU33importjavax.swing.*;importjava.awt.event.*;publicclassHelloWorldSwing{publicstaticvoidmain(String[]args){JFrameframe=newJFrame("HelloWorldSwing");finalJLabellabel=newJLabel("HelloWorld!");frame.getContentPane().add(label);
frame.setSize(200,70);frame.setVisible(true);}}NCEPUimportjavax.swing.*;NCEPU34JFrame的使用为了在选择框架的关闭按钮时能退出程序,应添加WindowListener监听器或书写下列代码:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
NCEPUJFrame的使用为了在选择框架的关闭按钮时能退出程序,应添35JFrame的使用组件(Component)类方法publicvoidsetLocation(intx,inty)
设置组件的位置NCEPUJFrame的使用组件(Component)类方法NCEPU36第二节
框架importjavax.swing.*; publicclassJFrameDemo{
publicstaticvoidmain(Stringargs[]){ JFramefr=newJFrame("学生信息管理系统"); 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_CLOSE);
}}NCEPU第二节框架importjavax.swing.*; 37面板面板(JPanel)与框架类似,也是一种容器,可以容纳其他GUI组件。与框架不同的是,面板没有标题,不能独立存在,实例化以后必须使用Container类的add方法装入到Window对象或Frame对象中,这样它才可见。NCEPU面板面板(JPanel)与框架类似,也是一种容器,可以容纳38Swing常用的容器—JPanelJPanel面板是一种添加到其他容器使用的容器组件。JPanel的构造方法:publicJPanel()publicJPanel(LayoutManagerlayout)
JPanel可指定边界,可用JComponent类的setBorder()方法设置边界。其用法如下:
publicvoidsetBorder(Borderborder)NCEPUSwing常用的容器—JPanelJPanel面板是一种添加39第二节
框架importjava.awt.*;importjavax.swing.*;publicclassFrameWithPanelextendsJFrame{ publicstaticvoidmain(Stringargs[]){ FrameWithPanelfr=newFrameWithPanel("Hello!"); fr.setSize(200,200); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanelpan=newJPanel(); pan.setSize(200,100);NCEPU第二节框架importjava.awt.*;NCEP40第二节
框架 pan.setBackground(Color.yellow); pan.setLayout(newGridLayout(2,1)); pan.add(newJButton("确定")); fr.setContentPane(pan); fr.setVisible(true);}publicFrameWithPanel(Stringstr){ super(str); }} NCEPU第二节框架 pan.setBackground41布局管理器(LayoutManager)所谓布局,就是各组件在容器中如何摆放。为了实现跨平台的特性并获得动态的布局效果,Java将
容器内的所有组件安排给“布局管理器”负责管理。布局管理器管理当窗口移动或调整大小后组件如何变化
等功能。NCEPU布局管理器(LayoutManager)所谓布局,就是各组件42布局管理器的分类FlowLayout(流式布局):Panel和Applet的缺省布局管理器BorderLayout(边界布局):JDialog和JFrame的缺省布局管理器GridLayout(网格布局)GridBagLayout(网格组布局)CardLayout(卡片布局)BoxLayout(箱式布局)SpringLayout(弹簧布局)每个容器都有缺省的布局管理器。在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。可通过setLayout(LayoutManagerm)方法为容器设置新布局。布局管理器(LayoutManager)NCEPU布局管理器的分类布局管理器(LayoutManager)NC43布局管理器FlowLayout(流式布局)
将组件逐个放到容器的一行上
一行放满后就重新起一个新行BorderLayout(边界布局)
容器被划分为东(East)、南(South)、
西(West)、北(North)、中(Center)NCEPU布局管理器FlowLayout(流式布局)
将组件逐个放44布局管理器GridLayout(网格式布局)
将容器分为大小相等的若干行乘若干列的网格,组件从左至右,从上到下放入网格中,每个组件占一格(表格式)CardLayout(卡片式布局)
将容器中的组件处理成一组卡片,每一时刻只显示一张卡片,可以在卡片间切换NCEPU布局管理器GridLayout(网格式布局)
45FlowLayout布局管理器FlowLayout布局管理器FlowLayout是Panel类的默认布局管理器布局方式:
将组件逐个地放在容器的一行上,一行放满就另起一个新行。
其中,一行的长度取决于容器的宽度NCEPUFlowLayout布局管理器FlowLayout布局管理46FlowLayout布局管理器FlowLayout布局管理器构造方法:publicFlowLayout();publicFlowLayout(intalign);publicFlowLayout(intalign,inthgap,intvgap);其中,align表示对齐方式,hgap和vagp表示组件的水平和垂直间距,单位是像素。若没有指定align,则默认让组件居中摆放align的取值为常量:FlowLayout.LEFT,
FlowLayout.RIGHT和FlowLayout.CENTER例如:newFlowLayout(FlowLayout.LEFT)NCEPUFlowLayout布局管理器FlowLayout布局管理47FlowLayout布局管理器FlowLayout布局管理器设置FlowLayout布局
FlowLayoutflow=newFlowLayout();
Framefr=newFrame();
fr.setLayout(flow);由于一个容器只要设置了布局通常就不会再改变,因此上面的语句可以简化成:
fr.setLayout(newFlowLayout());NCEPUFlowLayout布局管理器FlowLayout布局管理48FlowLayout布局管理器FlowLayout布局管理器可以设置框架fr为组件左对齐的FlowLayout布局:
fr.setLayout(newFlowLayout(FlowLayout.LEFT));还可以设置框架fr为组件左对齐的FlowLayout布局,并且组件的水平间距为20像素,垂直间距为40像素:
fr.setLayout(newFlowLayout(FlowLayout.LEFT,20,40));NCEPUFlowLayout布局管理器FlowLayout布局管理49importjava.awt.*;importjavax.swing.*;classFlowLayoutDemoextendsJFrame{JButtonjb1,jb2,jb3,jb4,jb5;
publicFlowLayoutDemo(Stringtitle){super(title);}
voidinit(){this.setVisible(true); this.setSize(300,200);Containerc=this.getContentPane();jb1=newJButton("第一个按钮");jb2=newJButton("第二个按钮");jb3=newJButton("第三个按钮");jb4=newJButton("第四个按钮");jb5=newJButton("第五个按钮");c.setLayout(newFlowLayout());//设置布局管理器
c.add(jb1);c.add(jb2);c.add(jb3);c.add(jb4);c.add(jb5);}
publicstaticvoidmain(String[]args){FlowLayoutDemof=newFlowLayoutDemo("FowLayoutDemo"); f.init();}}
FlowLayout使用示例NCEPUimportjava.awt.*;FlowLayout使用50BorderLayout布局管理器BorderLayout布局管理器BorderLayout是Frame类和Dialog类的默认布局管理器布局方式:
容器被划分为东(East)、南(South)、
西(West)、北(North)、中(Center)五个区域变化规律为:组件的相对位置不变,大小发生变化。NCEPUBorderLayout布局管理器BorderLayout51水平拉宽我们可以看到:南、北、中控件大小会有变化,东、西控件大小不变化。BorderLayout布局管理器BorderLayout布局管理器NCEPU水平拉宽我们可以看到:南、北、中控件大小会有变化,东、西控件52上下拉长可以看到:东、西、中控件大小会有变化,南、北控件大小不变化。BorderLayout布局管理器BorderLayout布局管理器NCEPU上下拉长可以看到:东、西、中控件大小会有变化,南、北控件大小53BorderLayout布局管理器BorderLayout布局管理器构造方法:publicBorderLayout();publicBorderLayout(inthgap,intvgap);其中,hgap和vagp表示组件的水平和垂直间距,单位是像素,默认为0NCEPUBorderLayout布局管理器BorderLayout54BorderLayout布局管理器BorderLayout布局管理器Container容器类放置组件的方法:
publicComponentadd(Componentcomp,intindex)
其中,index指明组件放置的区域,分别为:
BorderLayout.EAST或"East"
BorderLayout.WEST或"West"
BorderLayout.SOUTH或"South"
BorderLayout.NORTH或"North"
BorderLayout.CENTER或"Center"NCEPUBorderLayout布局管理器BorderLayo55importjava.awt.*;importjavax.swing.*;classBLExampleextendsJFrame{
publicBLExample(Stringtitle){super(title);ContainercontentPane=getContentPane();
contentPane.setLayout(newBorderLayout(2,2));contentPane.add(BorderLayout.NORTH,newJButton("North"));contentPane.add(BorderLayout.SOUTH,newJButton("South"));contentPane.add(BorderLayout.EAST,newJButton("East"));contentPane.add(BorderLayout.WEST,newJButton("West"));contentPane.add(BorderLayout.CENTER,newJButton("Center"));
}publicstaticvoidmain(Stringargs[]){BLExampleframe=newBLExample("Example");frame.setDefaultCloseOperation(EXIT_ON_CLOSE);frame.setSize(500,300);frame.setVisible(true);}}NCEPUimportjava.awt.*;NCEPU56第四节布局管理器importjavax.swing.*; publicclassExGui2{
privateJFramef; privateJButtonbe,bs,bw,bn,bc;
publicstaticvoidmain(Stringargs[]){ ExGui2that=newExGui2(); that.go(); }
NCEPU第四节布局管理器importjavax.swing.57第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("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.setVisible(true);} }输出为:NCEPU第四节布局管理器 voidgo(){输出为:N58第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("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.setVisible(true);} }
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,BorderLayout.EAST); f.add(bs,BorderLayout.SOUTH); f.add(bw,BorderLayout.WEST); f.add(bn,BorderLayout.NORTH); f.add(bc,BorderLayout.CENTER); f.setSize(350,200); f.setVisible(true);} }Frame类默认的布局管理器就是BorderLayout因此不用再使用f.setLayout(newBorderLayout())区域的默认值是BorderLayout.CENTER因此f.add(bc,BorderLayout.CENTER)与 f.add(bc)是等价的。若将多个组件放在了同一个区域内,最后一个放入的组件将覆盖前面的组件NCEPU第四节布局管理器 voidgo(){ void59第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("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);} }若将多个组件放在了同一个区域内,最后一个放入的组件将覆盖前面的组件输出为:NCEPU第四节布局管理器 voidgo(){若将多个组60第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("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.setVisible(true);} }对于East、South、West、North四个边界区域,若其中的某个区域没有放置组件,则这个区域将变为0,同时Center区域的组件将会扩展到这个区域NCEPU第四节布局管理器 voidgo(){对于Eas61第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("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.setVisible(true);} }对于East、South、West、North四个边界区域,若其中的某个区域没有放置组件,则这个区域将变为0,同时Center区域的组件将会扩展到这个区域输出为:NCEPU第四节布局管理器 voidgo(){对于Eas62第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("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.setVisible(true);} }对于East、South、West、North四个边界区域,若其中的某个区域没有放置组件,则这个区域将变为0,同时Center区域的组件将会扩展到这个区域输出为:NCEPU第四节布局管理器 voidgo(){对于Eas63第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("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.setVisible(true);} }对于East、South、West、North四个边界区域,若其中的某个区域没有放置组件,则这个区域将变为0,同时Center区域的组件将会扩展到这个区域若四个边界区域都没有组件,则Center区域的组件将充满整个容器NCEPU第四节布局管理器 voidgo(){对于Eas64第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("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.setVisible(true);} }若四个边界区域都没有组件,则Center区域的组件将充满整个容器输出为:NCEPU第四节布局管理器 voidgo(){若四个边界65第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("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.setVisible(true);} }若四个边界区域都没有组件,则Center区域的组件将充满整个容器对于Center区域,如果不放置组件,则容器中间将会空白,边界区域的组件不会扩展过来NCEPU第四节布局管理器 voidgo(){若四个边界66第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("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.setVisible(true);} }对于Center区域,如果不放置组件,则容器中间将会空白,边界区域的组件不会扩展过来输出为:NCEPU第四节布局管理器 voidgo(){对于Cen67第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,"East"); f.add(bs,"South"); f.add(bw,"West");
f.add(bn,"North"); f.add(bc,"Center"); f.setSize(550,300); f.setVisible(true);} }当容器大小发生改变的时候,各组件的大小也发生变化。但不管容器大小如何改变,North和South区域的高度保持不变,East和West区域的宽度保持不变输出为:NCEPU第四节布局管理器 voidgo(){当容器大小68第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,"East"); f.add(bs,"South"); f.add(bw,"West");
f.add(bn,"North"); f.add(bc,"Center"); f.setSize(550,300); f.setVisible(true);} }当容器大小发生改变的时候,各组件的大小也发生变化。但不管容器大小如何改变,North和South区域的高度保持不变,East和West区域的宽度保持不变因此,实际上真正变化的主要是Center区域的组件将随容器的大小变化而变化。NCEPU第四节布局管理器 voidgo(){当容器大小69第四节布局管理器
voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("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.setVisible(true);} }可以使用BorderLayout的构造方法来设置各个区域组件的间距。例如,在程序中加入:
f.setLayout(newBorderLayout(10,20))输出为:NCEPU第四节布局管理器 voidgo(){可以使用B70布局管理器3.GridLayout布局管理器布局方式:
这是一种网格式布局,它将容器分为大小相等的若干行和若干列的网格,组件从左至右从上到下依次放入网格中,每个组件占一格
实际上,这种布局方式就是一个表格NCEPU布局管理器3.GridLayout布局管理器NCEPU71使容器中的各组件呈网格状分布。各组件的排列方式为:从上到下,从左到右。组件放入容器的次序决定了它在容器中的位置。网格每列宽度相同,等于容器的宽度除以网格的列数。网格每行高度相同,等于容器的高度除以网格的行数。容器大小改变时,组件的相对位置不变,大小会改变。若组件数超过网格设定的个数,则布局管理器会自动增加网格个数,原则是保持行数不变。布局管理器NCEPU使容器中的各组件呈网格状分布。布局管理器NCEPU72布局管理器3.GridLayout布局管理器构造方法:publicGridLayout();publicGridLayout(introws,intcols);publicGridLayout(introws,intcols,
inthgap,intvgap);
其中,rows和cols表示行数和列数;hgap和vagp表示组件的水平和垂直间距,单位是像素,默认为0当没有rows和cols时,将构造一个只有一行的网格,列数由组件的个数而定NCEPU布局管理器3.GridLayout布局管理器其中,73importjava.awt.*; classGridEx
{
privateJFramef; privateJButtonb1,b2,b3,b4,b5;
publicstaticvoidmain(Stringargs[]){ GridExthat=newGridEx(); that.go(); }
voidgo()
{ f=newJFrame("GridLayout"); f.setLayout(newGridLayout(3,2)); NCEPUimportjava.awt.*; NCEPU74
b1=newJButton("b1"); b2=newJButton("b2"); b3=newJButton("b3"); b4=newJButton("b4"); b5=newJButton("b5"); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5);
f.setSize(200,200);
f.setVisible(true);} }NCEPU b1=newJButton("b1");NC75importjava.awt.*; classGridEx
{
privateJFramef; privateJButtonb1,b2,b3,b4,b5;
publicstaticvoidmain(Stringargs[]){ GridExthat=newGridEx(); that.go(); }
voidgo()
{ f=newJFrame("GridLayout"); f.setLayout(newGridLayout(2,2)); 若放置的组件超过网格设定的个数,则布局管理器会自动增加网格个数,原则是保持行数不变NCEPUimportjava.awt.*; 若放置的组件超过网格设76importjava.awt.*;importjavax.swing.*;classGridFrameextendsJFrame{
publicGridFrame(Strings){ super(s); setSize(200,200); Stringstr[]={"1","2","3","4","5","6","7","8","9"}; setLayout(newGridLayout(3,3,2,2));JButtonbtn[];//声明按钮数组
btn=newJButton[str.length];//创建按钮数组
for(inti=0;i<str.length;i++){btn[i]=newJButton(str[i]);this.add(btn[i]);} setVisible(true);
}
publicstaticvoidmain(String[]args){GridFramegl=newGridFrame("网格布局演示!"); }}
网格布局示例NCEPUimportjava.awt.*;网格布局示例NCEPU77在实际应用中,网格布局(有时仅仅一行或者一列)在组织窗口的局部区域比较有用。网格布局应用添加修改删除查询统计如果需要一行或多行相同尺寸的按钮,那么可以把按钮放在一个面板里,该面板使用网格布局进行管理。NCEPU在实际应用中,网格布局(有时仅仅一行或者一列)在组织窗口的局78卡片式布局—CardLayout将容器中的组件处理为一系列卡片。每一时刻只显示其中的一张。可以在卡片之间进行切换。CardLayout—卡片式布局管理器NCEPU卡片式布局—CardLayoutCardLayout—卡片式79构造方法publicCardLayout();
组件距容器左右边界和上下边界的距离为缺省值0个象素。publicCardLayout(inthgap,intvgap);
组件距容器左右边界和上下边界的距离为指定值。CardLayout—卡片式布局管理器NCEPU构造方法CardLayout—卡片式布局管理器NCEPU80
向容器中添加组件的方法
Container.add(Component,String);
如:f.add(p1,"First");采用CardLayout布局方式时,向容器中添加组件时可以为组件取一个名字,以供更换显示组件时使用。CardLayout—卡片式布局管理器NCEPU向容器中添加组件的方法如:f.add(p1,"Fi81
其他常用方法publicvoidshow(Containerparent,Stringname)publicvoidnext(Containerparent)publicvoidprevious(Containerparent)publicvoidfirst(Containerparent)publicvoidlast(Containerparent)其中,Container是拥有该CardLayout布局管理器的容器。
myCardLayout.show(f,"First");CardLayout—卡片式布局管理器NCEPU其他常用方法CardLayout—卡片式布局管理器NCE82与BorderLayout类和GridLayout类相类似,每张卡片中只能放置一个组件,如果想在一张卡片中放置多个组件,则必须先在该卡片中放一个容器,再将多个组件放在该容器中。CardLayout—卡片式布局管理器NCEPU与BorderLayout类和GridLayout类83importjava.awt.*; importjava.awt.event.*;importjavax.swing.*;classCardTestextendsMouseAdapter{ JPanelp1,p2,p3; JLabell1,l2,l3; CardLayoutmyCard; JFramef; Containerc;
publicstaticvoidmain(Stringargs[]){ CardTestct=newCardTest(); ct.init(); }NCEPUimportjava.awt.*; NCEPU84
publicvoidinit(){f=newJFrame("CardTest"); myCard=newCardLayout(); f.setLayout(myCard); p1=newJPanel(); p2=newJPanel(); p3=newJPanel();
l1=newJLabel("ThisisthefirstPanel"); p1.add(l1); p1.setBackground(Color.yellow);l2=newJLabel("Thisisthe2ndPanel"); p2.add(l2); p2.setBackground(Color.green);l3=newJLabel("Thisisthe3rdPanel"); p3.add(l3); p3.setBackground(Color.magenta);NCEPU publicvoidinit()NCEPU85 c=f.getContentPane();
c.add(p1,"First"); c.add(p2,"Second"); c.add(p3,"Third"); myCard.show(c,"First"); f.setSize(300,200); f.setVisible(true);p1.addMouseListener(this); p2.addMouseListener(this); p3.addMouseListener(this);
}
publicvoidmouseClicked(MouseEvente)
{ myCard.next(c);}}NCEPU c=f.getContentPane();NCEPU86importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;public
classCardLayoutWindowextendsJFrameimplementsActionListener{JPanelcards;CardLayoutCLayout=newCardLayout();NCEPUimportjava.awt.*;NCEPU87publicCardLayoutWindow(){setLayout(newBorderLayout());//创建摆放"卡片切换"按钮的panel,并添加到Frame中。JPanelcp=newJPanel();JButtonbt=newJButton("卡片切换");bt.addActionListener(this);cp.add(bt);add(“North”,cp);//创建承放多个卡片的Panel,设置为CardLayout。
cards=newJPanel();cards.setLayout(CLayout);//创建cards中的第一个panel及其组件。
JPanelp1=newJPanel();p1.add(newJButton("Button1"));p1.add(newJButton("Button2"));p1.add(newJButton("Button3"));NCEPUpublicCardLayoutWindow(){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阀门原厂供货合同范例
- 设备清单维护合同范例
- 司机合同范例表格
- 合同范例里下订
- 稻谷种子买卖合同范例
- 代建返租合同范例
- 定伞合同范例
- 借条不是借款合同范例
- 产品装饰后合同范例
- 项目委托合同范例范例
- 智能化弱电工程技术方案(完整)
- 国开(贵州)2024年《仲裁法》形考作业1-2终考任务试题
- DL-T5796-2019水电工程边坡安全监测技术规范
- 2024年《满江红·小住京华》原文及赏析
- 植物病虫害防治赛项赛题及答案
- 急救知识与技术智慧树知到期末考试答案章节答案2024年新疆巴音郭楞蒙古自治州卫生学校
- TPM知识竞赛试题库
- 齐鲁针灸 知到智慧树网课答案
- (国开电大)可编程控制器应用课程实验
- 心跳骤停患者应急预案
- 2022-2023学年辽宁省葫芦岛市绥中县辽师大版(三起)四年级上学期期末英语试卷
评论
0/150
提交评论