1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,可整理ppt,*,Java GUI程序设计,Java GUI编程介绍,两种主要的容器:Frame/Panel,Awt中的布局管理(上),Awt中的布局管理(下),在awt中绘图,1,可整理ppt,AWT(Abstract Window Tools),GUI(Graphics User Interface):图形用户界面,AWT(Abstract Window Tools):抽象窗口工具,2,可整理ppt,java.awt包,在这个包中,,提供了基本的java程序GUI设计工具:,Component/MenuCo
2、mponent,Container,LayoutManager,Object,Component,TextField,Container,Others,Button,3,可整理ppt,Container(容器),容器(Container)实际上是Component的子类,因此容器类对象本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能。,容器类对象可使用方法add()添加组件,两种主要的容器类型,Window:可独立存在的顶级窗口,Panel:可作为容器容纳其它组件,但不能独立存在,必须被添加到其它容器中(如Window 或 Applet),4,可整理ppt,Contai
3、ner层次关系图,Container,Panel,Applet,Window,Frame,ScrollPane,Dialog,5,可整理ppt,Container常用方法,add(),setLocation(),setSize(),setBoundes(),setVisible(),pack(),6,可整理ppt,组件定制,组件的大小和位置由布局管理器(LayoutManager)决定。,不使用布局管理器则可以定制组件的大小和位置,但必须在容器中使用组件的setLocation(),setSize(),setBounds()方法确定大小位置,7,可整理ppt,Frame类,是Window类的子
4、类,有标题,可通过拖拉改变大小,初始化时为不可见,可用setVisible(true)使其显示出来,使用BorderLayout作为其缺省布局管理器,使用setLayout方法改变布局管理器,8,可整理ppt,Frame类例子(示例11-1),import java.awt.*;,public class MyFrame,public static void main(String args),Frame f=new Frame(Hello,My Frame!);,f.setSize(200,200);,f.show();,9,可整理ppt,Frame例子(con.),10,可整理ppt,Pa
5、nel,为放置组件提供空间,允许使用自己的布局管理器,不能单独存在,必须放置到其他容器中,11,可整理ppt,Panel例子(示例11-2),import java.awt.*;,public class MyPanel,public static void main(String args),/define a label,Label l=new Label(This Label);,/define a panel,Panel p=new Panel();,/set the panels size,p.setSize(200,100);,/add the label to the panel
6、p.add(l);,/define a frame,Frame f=new Frame(Hello,my panel!);,f.setSize(200,200);,/add the panel p to the Frame f,f.add(p);,/pack the componets together,f.pack();,f.show();,12,可整理ppt,Container的布局管理器,为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。,13,可整理ppt,Container的布局
7、管理器(con.),Awt中的布局管理器有:,FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout,14,可整理ppt,FlowLayout,GUI Component从左到右按顺序配置在Container中,若到达右边界,则会折回到下一行中,FlowLayout是Panel和Applet的默认管理器,FlowLayout()/FlowLayout(int align)/FlowLayout(int align,int hgap,int vgap),FlowLayout.LEFT/FlowLayout.CENTER/FlowLa
8、yout.RIGHT,默认为靠中对齐,使用组件的理想尺寸,15,可整理ppt,FlowLayout 例子(示例11-3),import java.awt.*;,public class MyFlowLayout extends Frame,private Button leftButton,centerButton,rightButton;,public MyFlowLayout(),super(My FlowLayout Test);,/定义按钮,leftButton=new Button(左);,centerButton=new Button(中);,rightButton=new But
9、ton(右);,/居中对齐,setLayout(new FlowLayout(FlowLayout.CENTER);,/加上按钮,add(leftButton);,add(centerButton);,add(rightButton);,/设置大小,setSize(200,100);,/显示,show();,public static void main(String args),MyFlowLayout app=new MyFlowLayout();,16,可整理ppt,BorderLayout,BorderLayout将Container分为EAST、SOUTH、WEST、NORTH、CE
10、NTER五个区域,Component可以放置在这五个区域的任何一个,BorderLayout是Frame、Dialog的默认管理器,如果在一个区域中放入多个Component,后放入的Component会把前面的覆盖,BorderLayout()/BorderLayout(int hgap,int vgap),BorderLayout.EAST、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.SOUTH、BorderLayout.CENTER,17,可整理ppt,BorderLayout(con.),BorderLayout布局格式:当改变容
11、器大小时,North,South和Center区域水平调整,East,West和Center区域垂直调整,North,South,West,East,Center,18,可整理ppt,BorderLayout例子(示例11-4),import java.awt.*;,public class MyBorderLayout extends Frame,private String name=东,南,西,北,中;,private Button button=new Buttonname.length;,public MyBorderLayout(),super(My BorderLayout Te
12、st);,for(int i=0;iname.length;i+),buttoni=new Button(namei);,/设置布局BorderLayout,水平和垂直间隙均为5,setLayout(new BorderLayout(5,5);,/加上按钮,add(button0,BorderLayout.EAST);,add(button1,BorderLayout.SOUTH);,add(button2,BorderLayout.WEST);,add(button3,BorderLayout.NORTH);,add(button4,BorderLayout.CENTER);,setSize
13、300,200);,show();,public static void main(String args),MyBorderLayout app=new MyBorderLayout();,19,可整理ppt,GridLayout,GridLayout将Component配置在纵横格线分割的格子中,从左到右,从上到下;,构造器:GridLayout()/GridLayout(int rows,int cols)/GridLayout(int rows,int cols,int hgap,int vgap),20,可整理ppt,GridLayout例子(示例11-5),import java
14、awt.*;,public class MyGridLayout extends Frame,private String name=0,1,2,3,4,5,6,7,8,9,+,-,*,/,.;,private Button button=new Buttonname.length;,public MyGridLayout(),super(My GridLayou Test:Caculator);,/三行五列的布局,水平和垂直间隙均为4,setLayout(new GridLayout(3,5,4,4);,for(int i=0;iname.length;i+),buttoni=new Bu
15、tton(namei);,this.add(buttoni);,setSize(250,150);,show();,public static void main(String args),MyGridLayout app=new MyGridLayout();,21,可整理ppt,CardLayout,将加入到Container中的Component看成一叠卡片,只有最上面的那个Componet才可见,构造器:CardLayout()/CardLayout(int hgap,int vgap),控制组件可见的方法:first(Container target)/last(Container
16、target)/previous(Container target)/next(Container target)/show(Container target,String name),22,可整理ppt,CardLayout例子(示例11-6),cardLayout1=new CardLayout();,cp=new Panel();,cp.setLayout(cardLayout1);,for(int i=0;iname.length;i+),/定义卡片(Label),cardi=new Label(namei);,/把这些卡片加到cp这个Panel中,cp.add(namei,cardi
17、);,23,可整理ppt,CardLayout例子(con.),24,可整理ppt,在 awt中画图,通常,创建Canvas类或Panel的子类,并覆盖paint方法,每当组件出现时调用paint方法,每个组件都有一个Graphics对象,Graphics类实现了很多绘图方法,25,可整理ppt,AWT中的坐标,(0,0),(x,y),x轴,y轴,26,可整理ppt,在awt中画图例子(示例11-7),class DrawingPanel extends Panel,public void paint(Graphics g),/绘制矩形,g.drawRect(50,50,70,70);,/绘制圆角矩形,g.drawRoundRect(110,10,50,30,20,10);,27,可整理ppt,






