《17JavaGUI程序设计一教学提纲》由会员分享,可在线阅读,更多相关《17JavaGUI程序设计一教学提纲(27页珍藏版)》请在金锄头文库上搜索。
1、Java GUI程序设计,Java GUI编程介绍 两种主要的容器:Frame/Panel Awt中的布局管理(上) Awt中的布局管理(下) 在awt中绘图,AWT (Abstract Window Tools),GUI(Graphics User Interface):图形用户界面 AWT (Abstract Window Tools):抽象窗口工具,java.awt包,在这个包中,提供了基本的java程序GUI设计工具: Component/MenuComponent Container LayoutManager,Object,Component,TextField,Container
2、,Others,Button,Container层次关系图,Container,Panel,Applet,Window,Frame,ScrollPane,Dialog,Container常用方法,add() setLocation() setSize() setBoundes() setVisible() pack(),组件定制,组件的大小和位置由布局管理器(LayoutManager)决定。 不使用布局管理器则可以定制组件的大小和位置,但必须在容器中使用组件的setLocation(), setSize(), setBounds()方法确定大小位置,Frame类,是Window类的子类 有标
3、题,可通过拖拉改变大小 初始化时为不可见,可用setVisible(true)使其显示出来 使用BorderLayout作为其缺省布局管理器 使用setLayout方法改变布局管理器,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(); ,Frame例子(con.),Panel,为放置组件提供空间 允许使用自己的布局管理器 不能单独
4、存在,必须放置到其他容器中,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 p.add(l); /define a frame Frame f=new Fr
5、ame(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(); ,Container的布局管理器,为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。,Container的布局管理器(con.),Awt中的布局管理器有: FlowLayout BorderLayout GridLayout Ca
6、rdLayout GridBagLayout,FlowLayout,GUI Component从左到右按顺序配置在Container中,若到达右边界,则会折回到下一行中 FlowLayout是Panel和Applet的默认管理器 FlowLayout()/ FlowLayout(int align)/ FlowLayout(int align,int hgap,int vgap) FlowLayout.LEFT/ FlowLayout.CENTER/ FlowLayout.RIGHT 默认为靠中对齐 使用组件的理想尺寸,FlowLayout 例子(示例11-3),import java.awt
7、.*; public class MyFlowLayout extends Frame private Button leftButton,centerButton,rightButton; public MyFlowLayout() super(My FlowLayout Test); /定义按钮 leftButton=new Button(左); centerButton=new Button(中); rightButton=new Button(右); /居中对齐 setLayout(new FlowLayout(FlowLayout.CENTER); /加上按钮 add(leftBut
8、ton); add(centerButton); add(rightButton); /设置大小 setSize(200,100); /显示 show(); public static void main(String args) MyFlowLayout app=new MyFlowLayout(); ,BorderLayout,BorderLayout将Container分为EAST、SOUTH、WEST、NORTH、CENTER五个区域,Component可以放置在这五个区域的任何一个 BorderLayout是Frame、Dialog的默认管理器 如果在一个区域中放入多个Compone
9、nt,后放入的Component会把前面的覆盖 BorderLayout()/ BorderLayout(int hgap,int vgap) BorderLayout.EAST、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.SOUTH、BorderLayout.CENTER,BorderLayout(con.),BorderLayout布局格式:当改变容器大小时 North, South和Center区域水平调整 East, West和Center区域垂直调整,North,South,West,East,Center,BorderLayo
10、ut例子(示例11-4),import java.awt.*; public class MyBorderLayout extends Frame private String name=东,南,西,北,中; private Button button=new Buttonname.length; public MyBorderLayout() super(My BorderLayout Test); for (int i=0;iname.length;i+) buttoni=new Button(namei); /设置布局BorderLayout,水平和垂直间隙均为5 setLayout(n
11、ew BorderLayout(5,5); /加上按钮 add(button0,BorderLayout.EAST); add(button1,BorderLayout.SOUTH); add(button2,BorderLayout.WEST); add(button3,BorderLayout.NORTH); add(button4,BorderLayout.CENTER); setSize(300,200); show(); public static void main(String args) MyBorderLayout app=new MyBorderLayout(); ,Gri
12、dLayout,GridLayout将Component配置在纵横格线分割的格子中,从左到右,从上到下; 构造器:GridLayout()/ GridLayout(int rows,int cols)/ GridLayout(int rows,int cols,int hgap,int vgap),GridLayout例子(示例11-5),import java.awt.*; public class MyGridLayout extends Frame private String name=0,1,2,3,4,5,6,7,8,9,+,-,*,/,.; private Button butt
13、on=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 Button(namei); this.add(buttoni); setSize(250,150); show(); public static void main(String args) MyGridLayout app=new M
14、yGridLayout(); ,CardLayout,将加入到Container中的Component看成一叠卡片,只有最上面的那个Componet才可见 构造器:CardLayout()/ CardLayout(int hgap,int vgap) 控制组件可见的方法:first(Container target) / last(Container target) /previous(Container target) /next(Container target) /show(Container target,String name),CardLayout例子(示例11-6), cardL
15、ayout1=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); ,CardLayout例子(con.),在 awt中画图,通常,创建Canvas类或Panel的子类,并覆盖paint方法 每当组件出现时调用paint方法 每个组件都有一个Graphics对象 Graphics类实现了很多绘图方法,AWT中的坐标,(0,0),(x,y),x轴,y轴,在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); ,