第10部分基于Swing的图形用户界面设计方案.ppt
《第10部分基于Swing的图形用户界面设计方案.ppt》由会员分享,可在线阅读,更多相关《第10部分基于Swing的图形用户界面设计方案.ppt(93页珍藏版)》请在三一文库上搜索。
1、2019/4/14,1,第10章 基于Swing的图形用户界面设计,本章导读 AWT组件与SWING组件 JFrame窗体、菜单组件、布局设计 中间容器、文本组件 按钮与标签组件、复选框与单选按钮组件 列表组件、表格组件、树组件和进度条组件 窗口事件、鼠标事件、焦点事件和键盘事件 对话框 AWT线程与计时器 MVC设计模式 发布应用程序,2019/4/14,2,10.1 AWT组件与SWING组件概述,Java早期进行用户界面设计时,使用java.awt包中提供的类。 “AWT”就是Abstrac Window Toolkit(抽象窗口工具包)的缩写。 Java 2(JDK1.2)推出之后,增
2、加了一个新的javax.swing包,该包提供了功能更为强大的用来设计GUI界面的类。 Java早期的java.awt包中的类创建的组件习惯上称为重组件。例如,当用java.awt包中的Button类创建一个按钮组件时,都有一个相应的本地组件在为它工作(称为它的同位体)。 javax.swing包为我们提供了更加丰富的、功能强大的组件,称为SWING组件,其中大部分组件是轻组件,没有同位体。 SWING组件的轻组件在设计上和AWT完全不同,轻组件把与显示组件有关的许多工作和处理组件事件的工作交给相应的UI代表来完成。这些UI代表是用Java语言编写的类,这些类被增加到Java的运行环境中,因此
3、组件的外观不依赖平台,不仅在不同平台上的外观是相同的,而且较组件有更高的性能。如果Java运行环境低于1.2版本,就不能运行含有SWING组件的程序。,2019/4/14,3,图10.1 JComponent类的部分子类以及JFrame类和JDialog类,2019/4/14,4,容器类(Container)和组件类(Component),Java把由Component类的子类或间接子类创建的对象称为一个组件;把由Container的子类或间接子类创建的对象称为一个容器。 可以向容器添加组件。Container类提供了一个public方法add(),一个容器可以调用这个方法将组件添加到该容器中
4、。 调用removeAll()方法可以移掉容器中的全部组件,调用remove(Component c)方法可以移掉容器中参数指定的组件。 每当容器添加新的组件或移掉组件时,应该让容器调用validate()方法,以保证容器中的组件能正确显示出来。 容器本身也是一个组件,因此可以把一个容器添加到另一个容器中实现容器的嵌套。 javax.swing包中有4个最重要的类JApplet,JFrame,JDialog和JComponent。 注:JComponent类的子类都是轻组件,JComponent类是java.awt包中Container类的子类,因此所有的轻组件也都是容器。 而JFrame、J
5、Applet、JDialog都是重组件,即有同位体的组件,这样窗口(JFrame)、对话框(JDialog)、小应用程序(Java Applet)可以和操作系统交互信息。轻组件必须在这些容器中绘制自己,习惯上称这些容器为SWING的底层容器。,2019/4/14,5,10.2 JFrame窗体,javax.swing包中的JFrame类是java.awt包中Frame类的子类,因此JFrame类其子类创建的对象是窗体。 当应用程序需要一个窗口时,可使用JFrame或其子类创建一个对象。窗口默认地被系统添加到显示器屏幕上,因此不允许将一个窗口添加到另一个容器中。Frame类常用方法如下: JFr
6、ame() 创建一个无标题的窗口。 JFrame(String s) 创建一个标题为s的窗口。 public void setBounds(int a,int b,int width,int height)设置出现在屏幕上时的初始位置为(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。 public void setSize(int width,int height) 设置窗口的大小,在屏幕出现默认位置是(0,0)。 public void setVisible(boolean b) 设置窗口是可见还是不可见,窗口默认是不可见的。 public vo
7、id setResizable(boolean b) 设置窗口是否可调整大小,窗口默认是可调整大小的。 public void setDefaultCloseOperation(int operation) 该方法用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。其中的参数operation取下列有效值: 1) DO_NOTHING_ON_CLOSE 什么也不做 2)HIDE_ON_CLOSE 隐藏当前窗口 3)DISPOSE_ON_CLOSE 隐藏当前窗口,并释放窗体占有的其他资源 4)EXIT_ON_CLOSE 结束窗体所在的应用程序 这4个常量都是JFrame类中的static常
8、量,单击关闭图标后,程序根据operation取值做出不同的处理。 例子10-1用JFrame创建了两个窗口,程序运行效果如图10.2。,2019/4/14,6,例子10-1 运行效果图10.2,2019/4/14,7,10.3 菜单组件,窗口中的菜单条、菜单、菜单项是我们所熟悉的界面,菜单条、菜单、菜单项是窗口常用的组件,菜单放在菜单条里,菜单项放在菜单里。 1JMenuBar菜单条 JComponent类的子类JMenuBar是负责创建菜单条的,即JMenuBar的一个实例就是一个菜单条。 JFrame类有一个将菜单条放置到窗口中的方法: public void setJMenuBar(J
9、MenuBar menubar); 该方法将菜单条添加到窗口的菜单条区域(注意:只能向窗口添加一个菜单条)。,2019/4/14,8,2. JMenu菜单,JComponent类的子类JMenu类是负责创建菜单的,即JMenu的一个实例就是一个菜单。JMenu类的主要方法有以下几种: JMenu(String s) 建立一个指定标题菜单,标题由参数s确定 public void add(MenuItem item) 向菜单增加由参数item指定的菜单选项对象。 public void add(String s) 向菜单增加指定的选项。 public JMenuItem getItem(int
10、n) 得到指定索引处的菜单选项。 public int getItemCount() 得到菜单选项数目。,2019/4/14,9,3. JMenuItem菜单项,JMenuItem是JMenu的父类,该类是负责创建菜单项的,即JMenuItem的一个实例就是一个菜单项。菜单项放在菜单里。JMenuItem类的主要方法有以下几种: JMenuItem(String s) 构造有标题的菜单项。 JMenuItem(String text, Icon icon) 构造有标题和图标的菜单项 public void setEnabled(boolean b)设置当前菜单项是否可被选择。 public S
11、tring getLabel() 得到菜单项的名字。 public void setAccelerator(KeyStroke keyStroke) 为菜单项设置快捷键。 为了向该方法的参数传递一个KeyStroke对象,可以使用KeyStroke类的类方法public static KeyStroke getKeyStroke(char keyChar)返回一个KeyStroke对象;也可以使用KeyStroke类的类方法public static KeyStroke getKeyStroke(int keyCode,int modifiers)返回一个KeyStroke对象,其中参数key
12、Code取值范围为KeyEvent.VK_A KeyEvent.VK_Z,modifiers的取值如下:InputEvent.ALT_MASK,InputEvent.CTRL_MASK和InputEvent.SHIFT_MASK。,2019/4/14,10,4. 嵌入子菜单,JMenu是JMenuItem的子类,因此菜单项本身还可以是一个菜单,这样的菜单项称为子菜单。 为了使得菜单项有一个图标,可以用图标类Icon声明一个图标,然后使用其子类ImageIcon类创建一个图标,如 Icon icon=new ImageIcon(“dog.gif “); 下面的例10-2中有一个含有菜单的窗口(效
13、果如图10.3所示)。,2019/4/14,11,10.4 布局设计,当把组件添加到容器中时,希望控制组件在容器中的位置,这就需要学习布局设计的知识。 本节将介绍java.awt包中的FlowLayout、BorderLayout、CardLayout、GridLayout布局类和java.swing.border包中的BoxLayout布局类。 容器可以使用方法 setLayout(布局对象); 来设置自己的布局。 对于JFrame窗口,默认布局是BorderLayout布局。,2019/4/14,12,1FlowLayout布局,FlowLayout类的对象称为FlowLayout布局。F
14、lowLayout类的一个常用构造方法如下: FlowLayout();构造方法可以创建一个居中对齐的布局对象,如: FlowLayout flow=new FlowLayout(); con.setLayout(flow); 容器con使用flow这个布局对象 容器con可以使用Container类提供的add()方法将组件顺序地添加到容器中。 FlowLayout布局对象调用setAlignment(int aligin)方法可以重新设置布局的对齐方式,其中aligin可以取值FlowLayout.LEFT、FlowLayout.CENTER或FlowLayout.RIGHT。 FlowL
15、ayout布局对象调用setHgap(int hgap)方法和setVgap(int vgap)方法可以重新设置布局的水平间隙和垂直间隙。 如果需要改变最佳大小,组件需调用: public void setPreferredSize(Dimension preferredSize) 设置大小,例如:button.setPreferredSize(new Dimension(20,20); 注:对于添加到使用FlowLayout布局的容器中的组件,组件调用setSize(int x,int y)设置的大小无效。 例10-3中,JFrame使用FlowLayout布局放置10个组件(效果如图10.
16、4所示)。,2019/4/14,13,例子10-3 运行效果图10.4,2019/4/14,14,2BorderLayout布局,BorderLayout布局是Window容器的默认布局。 JFrame、JDialog都是Window类的间接子类,它们的内容面板的默认布局都是BorderLayout布局。 如果一个容器使用这种布局,那么容器空间简单地划分为东、西、南、北、中五个区域。每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示。例如, 一个使用BorderLayout布局的容器con,
17、可以使用add()方法将一个组件b添加到中心区域: con.add(b,BorderLayout.CENTER);或 con.add(BorderLayour.CENTER,b); 注: 添加到某个区域的组件将占据整个这个区域.每个区域只能放置一个组件,如果向某个已放置了组件的区域再放置一个组件,那么先前的组件将被后者替换。 注: 使用BorderLayout布局的容器最多能添加5个组件,如果容器中需要添加的组件超过5个,就必须使用容器的嵌套或改用其他布局策略。 例10-4使用了BorderLayout布局(效果如图10.5所示)。,2019/4/14,15,例子10-4 运行效果图10.5,
18、2019/4/14,16,3CardLayout 布局,使用CardLayout容器可以容纳多个组件,但同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面的一张一样,这个被显示的组件将占据所有的容器空间。 JTabbedPane窗格的默认布局是CardLayout布局,并且自带一些选项卡,这些选项卡与用户添加到JTabbedPane窗格中的组件相对应,单击该选项卡,JTabbedPane窗格将显示对应的组件。选项卡窗格自带的选项卡默认地在该选项卡窗格的顶部,从左向右依次排列,选项卡的顺序和所对应的组件的顺序相同。 JTabbedPane窗格可以使用add(Stri
19、ng text,Component c);方法将组件c添加到JTabbedPane窗格中,并指定和组件c对应的选项卡的文本提示是text。 使用JTabbedPane窗格的构造方法 public JTabbedPane(int tabPlacement)创建的选项卡窗格的选项卡的位置由参数tabPlacement指定,该参数的有效值为JTabbedPane.TOP、JTtabbedPane.BOTTOM、JTabbedPane.LEFT 和JTabbedPane.RIGHT。 例10-5在选项卡窗格中添加了5个按钮(带有图标),并设置了相对应的选项卡的文本提示,然后将选项卡窗格添加到窗体的内容
20、面板中(效果如图10.6所示)。,2019/4/14,17,例子10-5 运行效果图10.6,2019/4/14,18,4GridLayout布局,GridLayout是使用较多的布局编辑器,其基本布局策略是把容器划分成若干行若干列的网格区域,组件就位于这些划分出来的小格中。GridLayout比较灵活,划分多少网格由程序自由控制,而且组件定位也比较精确,使用GridLayout布局编辑器的一般步骤如下: (1)使用GridLayout的构造方法GridLayout(int m,int n)创建布局对象,指定划分网格的行数m和列数n,如 GridLayout grid=new GridLayo
21、ut(10,8); (2)使用GridLayout布局的容器调用方法add()将组件加入容器,组件进入容器的顺序将按照第一行第一个、第一行第二个第一行最后一个、第二行第一个最后一行第一个最后一行最后一个。 使用GridLayout布局的容器最多可添加mn个组件。GridLayout布局中每个网格都是相同大小,并且强制组件与网格的大小相同。 由于GridLayout布局中每个网格都是相同大小并且强制组件与网格的大小相同,使得容器中的每个组件也都是相同的大小,显得很不自然。为了克服这个缺点,可以使用容器嵌套。例如,一个容器使用GridLayout布局,将容器分为三行一列的网格,那么可以把另一个容器
22、添加到某个网格中,而添加的这个容器又可以设置为GridLayout布局、FlowLayout布局、CarderLayout布局或BorderLayout布局等。利用这种嵌套方法,可以设计出符合一定需要的布局.,2019/4/14,19,5BoxLayout布局,用BoxLayout类可以创建一个布局对象,称为盒式布局。BoxLayout在java.swing.border包中。java swing包提供了Box类,该类也是Container类的一个子类,创建的容器称为一个盒式容器。盒式容器的默认布局是盒式布局,而且不允许更改盒式容器的布局。因此,在策划程序的布局时,可以利用容器的嵌套,将某个容
23、器嵌入几个盒式容器,达到布局目的。 BoxLayou的构造方法BoxLayout(Container con,int axis)可以创建一个盒式布局对象,并指定容器con使用该布局对象,参数axis的有效值是BoxLayout.X_AXIS和BoxLayout.Y_AXIS。 Box类的类(静态)方法createHorizontalBox()可以获得一个具有行型盒式布局的盒式容器;Box类的类(静态)方法createVerticalBox()可以获得一个具有列型盒式布局的盒式容器。 控制盒式布局容器中组件之间的距离,需要使用水平支撑或垂直支撑。 Box类调用静态方法createHorizont
24、alStrut(int width)可以得到一个不可见的水平Struct类型对象.称为水平支撑.该水平支撑的高度为0,宽度是width。 Box类调用静态方法createVertialStrut(int height)可以得到一个不可见的垂直Struct类型对象,称为垂直支撑.参数height决定垂直支撑的高度,垂直支撑的宽度为0。 例10-6中(效果如图10.7所示),有两个列型盒式容器boxV1、boxV2和一个行型盒式容器baseBox。在列型盒式容器的组件之间添加垂直支撑,控制组件之间的距离,将boxV1、boxV2添加到baseBox中,并在它们之间添加水平支撑。,2019/4/14
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 部分 基于 Swing 图形 用户界面 设计方案
链接地址:https://www.31doc.com/p-2594921.html