Java的图形用户界面设计.ppt_第1页
Java的图形用户界面设计.ppt_第2页
Java的图形用户界面设计.ppt_第3页
Java的图形用户界面设计.ppt_第4页
Java的图形用户界面设计.ppt_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章 Java的图形用户界面设计 Java的图形用户界面(GUI)由 组件(component) 容器(container) 构成。 java.lang.object BorderLayout CardLayout CheckboxGroup Color Dimension Event Font FlowLayout FontMetrics Graphics GridBagConstraints GridBagLayout 组件和容器类间的基本继承关系 CheckboxMenuItem java.lang.object GridLayout Image Insets Point Polygon Rectangle Toolkit MenuComponet Component Menu MenuBar MenuItem 组件和容器类间的基本继承关系如下图: Applet(java applet package) java.lang.object Component Button Canvas Checkbox Choice Container Label List Scrollbar TextComponent Panel Window TextArea TextField Dialog Frame FileDialog Exceptions AWTException Errors AWTError 创建图形用户界面 容器和组件 Java抽象窗口工具集AWT(abstract window toolkit)的核心内容是组件和容器 。 组件通常为图形用户界面中的可见部分, 例如按钮(button)和标签(label)等。 容器和组件 通过add( )方法可将组件加入容器并显示出 来。 容器是图形用户界面中容纳其他组件的部 分,一个容器中可容纳一个或多个组件,甚 至还可以容纳其他容器。 组件的定位 容器中组件的位置由容器的布局管理器( layout manager)决定。 每个容器中都包含一个指向LayoutManager 实例的引用,称为该容器的布局管理器。 组件的大小 由于组件的大小由容器的布局管理器决定 ,通常情况下无需再在程序中对组件的大小 进行设定。 如果自己设定了组件的大小或位置,布局 管理器通常会将其忽略。 组件的大小 可以使用setLayout( )方法使容器的布局管 理器失效: setLayout(null); 用setLocation( )方法、setSize( )方法或 setBound( )方法对组件的大小和位置进行设 定。 框架 框架(Frame)类是Window类的子类,它 是一种带标题框并且可以改变大小的窗口。 创建一个简单的框架 使用Frame类的构造方法Frame(String)可 以创建Frame的实例,该实例是一个不可见 的对象,它带有标题框,构造方法中的String 型参数指定了标题内容。 创建一个简单的框架 使用从Component类继承过来的setSize( )方 法可以改变Frame实例的大小。 必须调用setVisible( )方法和setSize( )方法才 能使Frame的实例可见。 创建一个简单的框架 import java.awt.*; public class MyFrame extends Frame public static void main(String args) MyFrame fr = new MyFrame(“HelloOutThere !“); fr.setSize(400,200); fr.setBackground(Color.blue); fr.setVisible(true); public MyFrame (String str) super(str); 这里调用来自 Component类的 setSize( )方法 面板 面板(Panel)与框架类似,也是一种容器 ,可以容纳其他GUI组件。 面板通过构造方法Panel( )进行创建。 当一个Panel对象被创建之后,使用 Container类的add( )方法将它加入到某个 Window对象或Frame对象中。 面板示例 import java.awt.*; public class FrameWithPanel extends Frame public FrameWithPanel (String str) super(str); public static void main(String args) FrameWithPanel fr = new FrameWithPanel(“Frame with Panel“) ; Panel pan = new Panel( ); 构造函数 fr.setSize(300,200); fr.setBackground(Color.blue); fr.setLayout(null); pan.setSize(100,100); pan.setBackground(Color.yellow); fr.add(pan); fr.setVisible(true); 布局 Java语言中包含以下几种布局管理器: FlowLayout Panel类和Applet类的默认布局 管理器。 BorderLayout Window类、Dialog类和Frame 类的默认布局管理器。 GridLayout CardLayout GridBagLayout 一个简单的例子 import java.awt.*; public class ExGui private Frame f; private Button b1; private Button b2; public static void main(String args) ExGui that = new ExGui( ); that.go( ); public void go( ) f = new Frame (“GUI example“); f.setLayout(new FlowLayout( ); b1 = new Button(“Press me“); b2 = new Button(“Dont press Me“) ; f.add(b1); f.add(b2); f.pack( ); f.setVisible(true); 说明 1 main( )方法 main( )方法有两个作用。 创建了一个ExGui类的实例,在 这个实例创建之前,并没有实际可用的 f.b1和f.b2数据项。 当ExGui实例创建好以后, main( )又调用了该实例的go( )方法,在 这个方法中,程序的实际功能得以实现 。 说明 2new Frame(“GUI Example“) 功能是创建Frame类的一个实例。 Java中的Frame 是一个顶级( top level)窗口,它带有标题框并且可 以改变大小。 在刚刚创建时,Frame的大小为0,并且不可 见。 说明 3 f.setLayout(new FlowLayout( ) 创建了一个FlowLayout型的布局管理器,调 用setLayout( )方法将该布局管理器指定给 Frame实例。每个Frame都有一个默认的 BorderLayout型布局管理器,它负责安排 Frame中组件的布局,本例创建了 FlowLayout型布局管理器。 说明 4 new Button(“Press Me“) 这条语句的功能是创建java.Button类的一个 实例,该实例是窗口中的标准按钮button, 按钮上的标签由构造方法中String型参数 “Press Me“指定。 说明 5 f.add(b1) Frame的实例f接收按钮组件b1,按钮b1的大 小和位置便由f的FlowLayout型布局管理器 来控制。 6 f.pack( ) 框架f设定一个适当的大小,以便能够以“紧 缩”的形式包容各个组件。 布局管理器 FlowLayout布局管理器 FlowLayout型布局管理器对容器中组件 进行布局的方式是将组件逐个地安放在容 器中的一行上,一行放满后就另起一个新 行。 FlowLayout布局管理器 FlowLayout 有三种构造方法: public FlowLayout( ) public FlowLayout(int align) public FlowLayout(int align, int hgap, int vgap) FlowLayout布局管理器 在默认情况下,FlowLayout将组件居中放 置在容器的某一行上FlowLayout的构造方法 中提供了一个对齐方式的可选项align FlowLayout布局管理器 align的可取值 FlowLayout.LEFT 左对齐 FlowLayout.RIGHT 右对齐 FlowLayout.CENTER 居中 如: newFlowLayout(FlowLayout.LEFT) 创建了一个使用左对齐方式的FlowLayout的 实例。 FlowLayout布局管理器 FlowLayout的构造方法中还有一对可选项 hgap和vgap,可以设定组件的水平间距和垂 直间距。 FlowLayout布局管理器并不强行设定组件 的大小,而是允许组件拥有它们自己所希望 的尺寸。 FlowLayout布局管理器 示例: setLayout(new FlowLayout(FlowLayout.RIGHT,20,40); setLayout(new FlowLayout(FlowLayout.LEFT) ; setLayout(new FlowLayout( ); FlowLayout布局管理器 import java.awt.*; public class MyFlow private Frame f; private Button button1,button2,button3 ; public static void main(String args) MyFlow mflow = new MyFlow( ) ; mflow.go( ); public void go( ) f = new Frame(“Flow Layout“); f.setLayout(new FlowLayout( ); button1 = new Button(“Ok“); button2 = new Button(“Open“); button3 = new Button(“Close“); f.add(button1); f.add(button2); f.add(button3); f.setSize(100,100); f.setVisible(true); BorderLayout布局管理器 BorderLayout是Dialog类和Frame类的默认 布局管理器,它提供了一种较为复杂的组件 布局管理方案,每个被BorderLayout管理的 容器均被划分成五个区域:东(East)、南 (South)、西(West)、北(North)、中(Center)。 North 在容器的上部,East在容器的右部,其 他依此类推。Center当然就是East,South, West和North所围绕的中部。 BorderLayout布局管理器 BorderLayout布局管理器有两种构造方法: BorderLayout( )构造一个各部分间距为0 的BorderLayout实例。 BorderLayout(int, int)构造一个各部分具 有指定间距的BorderLayout实例。 BorderLayout布局管理器 在BorderLayout 布局管理器的管理下,组 件必须通过add( )方法加入到容器的五个命名 区域之一。 在容器的每个区域,只能加入一个组件。 BorderLayout布局管理器 可以使用内部容器在BorderLayout的一个 区域内间接放入多个组件。 如果某个区域没有使用,那么它的大小将 变为零,此时Center区域将会扩展并占据这 个未用区域的位置。 BorderLayout布局管理器 如: f = newFrame(“FrameTitle“); b = newButton(“PressMe“); f.add(b, “South“); 将一个按钮加到框架的南部 BorderLayout布局管理器 import java.awt.*; public class ExGui2 private Frame f; private Button be,bw,bn,bs,bc; public static void main(String args) ExGui2 that = new ExGui2( ); that.go( ); void go( ) f = new Frame(“Border Layout“); be = new Button(“East“); bs = new Button(“South“); bw = new Button(“West“); bn = new Button(“North“); bc = new Button(“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); GridLayout布局管理器 GridLayout是一种网格式的布局管理器, 它将容器空间划分成若干行乘若干列的网格 ,组件依次放入其中,每个组件占据一格。 GridLayout布局管理器 GridLayout三种构造方法: public GridLayout( ) public GridLayout(int rows, int cols) public GridLayout(int rows, int cols, int hgap, int vgap) GridLayout布局管理器 第一种不带参数的构造方法创建一个只有 一行的网格,网格的列数根据实际需要而定 。 参数:rows和cols分别指定网格的行数和 列数,hgap和vgap分别表示网格间的水平间 距和垂直间距。 GridLayout布局管理器 如: new GridLayout(3,2) ,可以创建一个三 行乘两列的布局管理器。 rows和cols中的一个值可以为0,但是两 个值不能都是0。 如果rows为0,那么网格的行数将根据实 际需要而定; 如果cols为0,那么网格的列数将根据实际 需要而定。 GridLayout布局管理器 import java.awt.*; public class GridEx private Frame f; private Button b1,b2,b3,b4,b5,b6; public static void main(String args) GridEx that = new GridEx( ); that.go( ); void go( ) f = new Frame(“Gridexample“); f.setLayout(new GridLayout(3,2); b1 = new Button(“b1“); b2 = new Button(“b2“); b3 = new Button(“b3“); b4 = new Button(“b4“); b5 = new Button(“b5“); b6 = new Button(“b6“); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5); f.add(b6); f.pack( ); f.setVisible(true); CardLayout布局管理器 CardLayout是一种卡片式的布局管理器, 它将容器中的组件处理为一系列卡片,每一 时刻只显示出其中的一张。 示例:为Frame类的实例f指定了一个 CardLayout类型的布局管理器,然后向其中 加入了五张卡片,每张卡片都是Panel类的一 个实例,并且具有不同的背景色。每当在程 序窗口单击鼠标时,下一张卡片就会显示出 来。 程序7-7: import java.awt.*; import java.awt.event.*; public class CardTest extends MouseAdapter Panel p1,p2,p3,p4,p5; Label l1,l2,l3,l4,l5; CardLayout myCard; Frame f; public static void main (String args) CardTest ct = new CardTest( ); ct.init( ); 声明一个 CardLayout 对象 public void init( ) f = new Frame (“Card Test“); myCard = new CardLayout( ); f.setLayout(myCard); p1 = new Panel( ); p2 = new Panel( ); p3 = new Panel( ); p4 = new Panel( ); p5 = new Panel( ); / 为每个Panel创建一个标签并设定不同的背景颜色,以便于区 分 l1 = new Label(“This is the first Panel“) ; p1.add(l1); p1.setBackground(Color.yellow); l2 = new Label(“This is the second Panel“); p2.add(l2); p2.setBackground(Color.green); l3 = new Label(“This is the third Panel“); p3.add(l3); p3.setBackground(Color.magenta); l4 = new Label(“This is the fourth Panel“); p4.add(l4); p4.setBackground(Color.white); l5 = new Label(“This is the fifth Panel“) ; p5.add(l5); p5.setBackground(Color.cyan); p1.addMouseListener(this); p2.addMouseListener(this); p3.addMouseListener(this); p4.addMouseListener(this); p5.addMouseListener(this); 设定鼠标事件 的监听程序 f.add(p1,“First“); f.add(p2,“Second“); f.add(p3,“Third“); f.add(p4,“Fourth“); f.add(p5,“Fifth“); myCard.show(f,“First“); f.setSize(300,200); f.show( ); / 处理鼠标事件,每当单击鼠标键时,即显示下一张卡片。 /如果已经显示到最后一张,则重新显示第一张。 public void mouseClicked(MouseEvent e) myCard.next(f); 显示第一 张卡片 将每个Panel作为 一张卡片加入f 其他布局管理器 除了前面介绍的FlowLayout, BorderLayout,GridLayout和CardLayout四 种布局管理器之外,java.awt还提供了 GridBagLayout布局管理器。 GridBagLayout布局管理器以网格为基础, 允许组件使用最适当的大小,既可以占多个 网格,也可以只占一个网格的一部分。 容器 框架 框架是一个带标题框的窗口,窗口的大小 可以改变。 默认情况下,框架使用BorderLayout布局 管理器,可以使用setLayout( )对此进行修改 。 面板 面板是一个容器,并且是一个纯粹的容器 ,它不能作为独立的窗口使用。 默认情况下,面板使用FlowLayout布局管 理器,同样可以使用setLayout( )方法对此进 行修改。 面板可以像按钮那样被创建并加入到其他 容器中。 面板 当面板被加入某个容器时,可以对它执行以 下两项重要操作: (1) 为面板指定一个布局管理器,使得在 整个显示区域中,面板 所在的部分具 有特殊的布局 。 (2) 向面板中加入组件。 创建面板和构造复杂布局 面板是通过构造方法panel( )创建的。 面板在创建之后,必须通过add( )方法加入 到其他容器中才有意义。 示例: 建立一个框架,框架的布局管理器是 BorderLayout,面板被放置在其North区域 。在面板中,放置了两个按钮。 程序7-8: import java.awt.*; public class ExGui3 private Frame f; private Panel p; private Button bw,bc; private Button bfile,bhelp; public static void main(String args) ExGui3 gui = new ExGui3( ); gui.go( ); public void go( ) f = new Frame (“GUI example 3“); bw = new Button(“West“); bc = new Button(“Work space region“) ; f.add(bw,“West“); f.add(bc,“Center“); p = new Panel( ); f.add(p,“North“); bfile = new Button(“File“); bhelp = new Button(“Help“); p.add(bfile); p.add(bhelp); f.pack( ); f.setVisible(true); F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A- x*t$qYnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A- x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*x*u$rZnWkShPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oXlTiQeNbK8G5D2A- x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A- x*t$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbKbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A- x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%r%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y)v(v%s#oXlUiQfNbK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A- x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#p#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8H8G5D2A- x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%r#oWlThQeQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfRfNcK8H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8H5D2A- x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWoWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%v%r#oXlTiQfNbK8G5D2A- x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%r%rZoWlThQeNbJ8G4D1A-w*t$qYnV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论