Java图形用户界面设计Java语言程序设计(第版)电子教案课件_第1页
Java图形用户界面设计Java语言程序设计(第版)电子教案课件_第2页
Java图形用户界面设计Java语言程序设计(第版)电子教案课件_第3页
Java图形用户界面设计Java语言程序设计(第版)电子教案课件_第4页
Java图形用户界面设计Java语言程序设计(第版)电子教案课件_第5页
已阅读5页,还剩136页未读 继续免费阅读

下载本文档

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

文档简介

1、第9章 图形用户界面(GUI)设计埂诌屏氏勘矛踩嵌邱玻旷怂长沈眶猛李挽法贺钳任槽料堕颊涪祭夹埔天诚9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第1页,共141页。9.1图形用户界面设计概述9.1.1 GUI支持包和简单GUI程序例1.java.awt包 Java语言在java.awt包中提供了大量地进行GUI设计所使用的类和接口,包括绘制图形、设置字体和颜色、控制组件、处理事件等内容,AWT是Java语言进行GUI程序设计的基础。2. javax.swing包Swing包是Java基础类库(Ja

2、va Foundation Classes,JFC)的一部分。Swing提供了从按钮到可分拆面板和表格的所有组件。恕谭碎毙峭碌淮客钱疼迄号钠尼溺雨铂笑猿信晚宙譬博椽哉惩真屠袒毫帮9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第2页,共141页。Swing组件是Java语言提供的第二代GUI设计工具包,它以AWT为基础,在AWT内容的基础上新增或改进了一些GUI组件,使得GUI程序功能更强大,设计更容易、更方便。Swing是开发新组件的项目代码名,现在,这个名字常用来引用新组件和相关的API。AWT

3、组件和对应的Swing组件,从名称上很容易记忆和区别。例如,AWT的框架类、面板类、按钮类和菜单类,被命名为Frame、Panel、Button和Menu,而Swing对应的组件类被命名为JFrame、JPanel、JButton和JMenu。与AWT组件相比,Swing组件的名前多一个 “J” 字母。另外,AWT 组件在java.awt包中,而Swing组件在javax.swing包中。卓踢爵信核阔第蒙腕亭倔丘管雇改荣半迸滋输篡氏僵泄汉态了砖万伶柿敷9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案

4、第3页,共141页。3.一个Java GUI简单程序【例9.1】一个简单的Swing GUI应用程序。在一个框架窗口中显示两个标签和一个按钮:上面的标签显示一串固定的文字信息,选择按钮后在下面的标签上显示系统现在的时间。import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;/ 继承JFrame类并实现ActionListener接口public class SwingDemo extends JFrame implements ActionListener JButton b1; /

5、声明按钮对象 JLabel l1,l2; / 声明标签对象翼忱仟鹿发真躬沫腰根释嫡续色兵茶陵梢资睡刑杖母肄窘葬捶改视霓铝腹9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第4页,共141页。 SwingDemo() / 定义构造方法 super(Swing应用程序的例);/ 调用父类的构造方法 l1=new JLabel(一个GUI应用程序的例子, JLabel.CENTER); / 定义标签,文字居中 l2=new JLabel( ); / 定义无文字标签 b1=new JButton(现在时间T

6、);/ 定义按钮 b1.setMnemonic(KeyEvent.VK_T);/ 设置按钮的快捷键 b1.setActionCommand(time); / 设置控制名 b1.addActionListener(this); / 注册按钮事件 add(l1,BorderLayout.NORTH); / 添加标签l1 add(l2,BorderLayout.CENTER); / 添加标签l2 add(b1,BorderLayout.SOUTH); / 添加标签b1 直皇慢德户闯佩闭昌玩蹦纱乒宜眨送惯铝稚纺对骏储养柠俏韧棺浓哟粹拦9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子

7、教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第5页,共141页。 / 对按钮引发事件编程 public void actionPerformed(ActionEvent e) / 捕获按钮事件 Calendar c1 = Calendar.getInstance(); / 获取系统日期和事件 if(e.getActionCommand().equals(time) / 判断是否为所需的按钮事件 l2.setText(“现在时间是”+ c1.get(Calendar.HOUR_OF_DAY) +“时”+c1.get(Calendar.MINUTE)+“分”); /

8、设置标签文字 l2.setHorizontalAlignment(JLabel.CENTER); / 设置标签标签文字居中对齐 哭蒸横芹厦俏渍痴柳拯链谊吏畜讫禾淡侍铲祟军硕予曲捉尾问驯习旅忆岔9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第6页,共141页。 else System.exit(0); public static void main(String args)/ 主方法 JFrame.setDefaultLookAndFeelDecorated(true); / 加此语句显示为运行结果

9、图的右图 JFrame frame = new SwingDemo(); / 创建JFrame对象,初始不可见 frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);/ 设置框架关闭按钮事件 frame.pack(); / 压缩框架的显示区域 frame.setVisible(true); / 显示框架主窗口 船攫攒梦含人妮舆或佣辅题枷缩戮洲泽磋犁甭鸦折涯十红猖佯牵擂湃重谤9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第7页,共141页。程序运

10、行后显示的形式如下图 。 Java Swing GUI应用程序中的基本代码如下。(1)引入合适的包和类一般的Swing GUI应用程序应包含程序中的前三个引入语句,它们分别表示引入awt包、awt事件处理包和swing包。其他包按需引入。耳戚漠涸岩盔定银岩蛇国笑华界岗栏糊麦小涩蒲督吝依馅巧至痰迪救行蕉9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第8页,共141页。由于Swing组件使用AWT的结构,包括AWT的事件驱动模式,所以,使用swing组件的程序一般需要使用awt包。(2)使用缺省的观感

11、或设置自己的观感(Look and Feel)(3)设置一个顶层的容器(4)根据需要,使用缺省的布局管理器或设置另外的布局管理器(5)定义组件并将它们添加到容器(6)对组件或事件编码串拾升达友翠涎融埂重包击环涂纱讥而芳般添溺攀过累隅缝盆腐益优归丰9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第9页,共141页。9.1.2 容器、组件、布局和观感1.容器(Container)和组件(Component)一个Java的图形用户界面的最基本元素是组件,组件是可以以图形化的方式显示在屏幕上并能与用户进行交

12、互的对象,如一个按钮、一个文本框等。在Java语言中,通常将组件放在一定的容器内使用。容器实际上是一种具有容纳其他组件和容器的功能的组件。抽象类Container是所有容器的父类,其中包含了很多有关容器的功能和方法。而类Container又是Java语言的组件类Component的子类。阀膨骄纫划澈榴私鞋留把那踏凉芯奇起拱琳恢掂钠所烃藏谦浇枢骗导伊厅9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第10页,共141页。2.布局管理器(Layout Manager)为了使得图形用户界面具有良好的平台无

13、关性,在Java语言中提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。容器中的组件定位由布局管理器决定。每个容器都有一个缺省的布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其相应的布局管理器。但也可以不用缺省的布局管理器,在程序中指定其新的布局管理器。Java平台提供多种布局管理器,常用的有FlowLayout、BorderLayout、 GridLayout、CardLayout、BoxLayout和GridBagLayout等。使用不同的布局管理器,组件在容器上的位置和大小都是很不一样的。 硬茸芭剥裕购娄错欲咀内谬孜贼裴揣呵拇新

14、琴淘每年持憨联惹泛溯刃毛露9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第11页,共141页。在程序中安排组件的位置和大小时,应该注意:(1)容器中的布局管理器负责各个组件的大小和位置。因此用户无法在这种情况下直接设置这些属性。若试图使用Java语言提供的setLocation()、setSize()、setBounds()等方法,则都会被布局管理器覆盖。(2)若用户确实需要亲自设置组件的位置和大小,则应取消该容器的布局管理器,方法为: setLayout(null);随后,用户必须使用setLo

15、cation()、setSize()、setBounds()等方法为组件设置大小和位置,但这种方法将会导致程序的系统相关。在一个GUI应用程序的界面上,除了可以见到上述的标准GUI元素外,还可以见到一些非交互的起到装饰、美化界面的作用的几何图形、图案、图像等内容。员挨捧籽胯愈窗鲁懒墒耿吗父谋围底掣览违泵初恬鸥涤镀超芒罪贪鸭宽暇9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第12页,共141页。3.观感(Look and Feel)Java swing的一个重要特征是它的可插入的“观感”体系。一个S

16、wing应用程序或一个最终用户可指明所需要的观感,使得Swing应用程序的外观和行为都可以被定制。Swing运行一个缺省的Java观感(也称为Metal观感),还实现了模仿Motif和Windows的观感。这样,一个Swing程序可拥有Java程序的独特外观,也可以拥有熟悉的Windows操作系统外观。在本章稍后部分的单选按钮的程序例中分别显示了Windows、Motif和Metal三种不同风格的观感。一般在应用程序的JFrame的构造方法中或在JApplet的init()方法中进行观感的设置。【例9.2】设置观感。import javax.swing.*;import java.awt.*;

17、户刽咖祁符竞阁磊沼瘟抛逻迟曹首暖拼召楞剃悸格拨谰峻蝴岔扁日须傍囤9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第13页,共141页。public class SetLAF public static void setNativeLookAndFeel() try UIManager.setLookAndFeel(UIManager. getSystemLookAndFeelClassName(); catch(Exception e) System.out.println(设置native LAF

18、错误: + e); public static void setJavaLookAndFeel() try UIManager.setLookAndFeel(UIManager. getCrossPlatformLookAndFeelClassName(); catch(Exception e) System.out.println(设置Java LAF错误: + e); 赖烃疹贩妖辈口牵锋秽甲虫斗醉憎文纲琉缴坑校川像箭株群饰伙谍嗅锌谨9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第14页,共14

19、1页。 public static void setMotifLookAndFeel() try UIManager.setLookAndFeel(“ com.sun.java.swing.plaf. motif.MotifLookAndFeel); catch(Exception e) System.out.println(设置Motif LAF错误: + e); 因为setLookAndFeel()方法抛出异常,因此设置观感的代码应捕捉异常。本例创建的类SetLAF可在以后的程序中设置观感时使用。皋祖风绥炬一隆志浴蝇枷啼假搪肉掏舜噎矣械绸增取粳毖雾链茹展轮崩缔9.Java图形用户界面设计

20、Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第15页,共141页。9.1.3事件处理在一个GUI程序中,为了能够接收用户的输入、命令的按键和鼠标操作,程序系统首先应该能够识别这些操作并做出相应的响应。通常一个键盘和鼠标操作将引发一个系统预先定义好的事件,用户程序只要编写代码定义每个事件发生时程序应做出何种响应即可。这些代码会在它们对应的事件发生时由系统自动调用,这就是GUI程序中事件和事件响应的基本原理。在Java语言中,除了键盘和鼠标操作,系统的状态改变也可以引发事件。抢藤纫腋洋土矮完剿付退栏吨冉俐屉忠辛釜恳涂凰瓶仕烂秩低

21、宫仗沥哉扬9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第16页,共141页。可能产生事件的组件称为事件源,不同事件源上发生的事件种类是不同的。若希望事件源上引发的事件被程序处理,需要将事件源注册给能够处理该事件源上那种事件类型的监听器。监听器具有监听和处理某类事件的功能,它可以是包容事件源的容器,也可以是另外的对象。也就是说,事件源和事件处理是分开的,一般组件都不处理自己的事件,而将事件处理委托给外部的处理实体,这种事件处理模型称为授权处理模型。事件的行为多种多样,由不同的监听器处理。编写事件处

22、理程序首先应确定关注的事件属于何种监听器类型。 逼歉殿聊愤笔琼唇关僵挣蔽前纲卜疯坦哟垃撞才辱钒但当绞哎铜惊庶绅见9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第17页,共141页。在AWT中,提供11种标准的监听器类型,见下表。 监听器 适配器类 注册方法 ActionListener addActionListenerAdjustmentListener addAdjustmentListenerComponentListener ComponentAdapter addComponentLis

23、tenerContainerListener ContainerAdapter addContainerListenerFocusListener FocusAdapter addFocusListenerItemListener addItemListenerKeyListener KeyAdapter addKeyListenerMouseListener MouseAdapter addMouseListenerMouseMotionListener MouseMotionAdapter addMouseMotionListenerTextListener addTextListener

24、WindowListener WindowAdapter addWindowListener煤途睁荧痊庇缓既暴迈澡芜喷丫垄贫厕祸另范坏洋安药蟹沼咳蹭摩喜沧守9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第18页,共141页。在确定监听器类型后,要用事件源类的注册方法来注册一个监听器类的对象。这样,事件源产生的事件会传送给已注册的处理该类事件的监听器对象,该对象将自动调用相应的事件处理方法来处理该事件。具体的注册方法是:用监听器类的对象作为参数调用事件源本身的addXxxListener()方法。该

25、方法的参数是一个监听器类的对象,有多种形式。例如:(1)分离的监听器类,该类通常为继承相应事件适配器类的子类,类中包含了事件处理方法。参数是该类的一个对象。(2)实现监听器接口,参数为this,表示本对象就是一个监听器类的对象。在本类中包含事件处理方法。(3)有名内部类,参数形式为继承事件适配器类的子类对象,在子类中包含事件处理方法。(4)匿名内部类,参数形式为用new开始的一个无名的类定义。其中包含事件处理方法。旗论酌椎佣揉镇闪隅拇长艳侵磕啊躲品降潭辞恒莎心陷浪痪菜难猪比百铬9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程

26、序设计(第2版) 电子教案第19页,共141页。9.2布局管理器在容器中所有组件的布局(位置和大小)由布局管理器来控制。在Java语言中提供了FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout等多种布局管理器。每种容器都有自己缺省的布局管理器。缺省地,JPanel使用FlowLayout,而内容窗格 ContentPane(JApplet、JDialog和JFrame对象的主容器) 使用BorderLayout。如果不希望使用缺省的布局管理器,则可使用所有容器的父类Container的setLayout()方法来改变缺省的布局

27、管理器。 杉因铜聊脊嚼悔见待傲住敞河哨告坠辞父亢膝帚械兽签洋菲惺桔烽却妙敦9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第20页,共141页。1.FlowLayoutFlowLayout布局是一种最基本的布局。这种布局指的是把组件一个接一个从左至右、从上至下地依次放在容器上,每一行中的组件缺省为居中对齐。当容器的尺寸改变后,组件的大小不变,但布局将会随之变化。FlowLayout是Applet和JPanel的缺省布局管理器。FlowLayout类的构造方法如下:FlowLayout() 创建每行组

28、件对齐方式为居中对齐、组件间距为5个像素单位的对象FlowLayout(int align) 创建指定每行组件对齐方式、组件间距为5个像素单位的对象,align可取三个静态常量LEFT、CENTER和RIGHT之一(分别表示左、中、右对齐方式)。 蝉瘁湃冗瑟漳酷业湘肿甜色晚忽丰肋逆初邯逮衍庶沫春猪晒绍范骸皱朵蔓9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第21页,共141页。FlowLayout(int align, int hgap, int vgap) 创建指定每行组件对齐方式的对象,该对象

29、也使用参数vgap和hgap指定了组件间的以像素为单位的纵横间距。向使用FlowLayout布局的容器添加组件可简单地使用下面的语句: add(组件名);2BorderLayoutBorderLayout 是内容窗格的缺省布局管理器。内容窗格是框架JFrame,小程序JApplet和对话框JDialog的主容器。BorderLayout将容器的布局分为五个区:北区、南区、东区、西区和中区。这几个区的分布规律是“上北下南,左西右东”。当容器的大小改变时,容器中的各个组件相对位置不变,其中间部分组件的尺寸会发生变化,四周组件宽度固定不变。嘶肄曲粥甥通哆蓉塔漳帛斌乞晒的勋躲欢和恕饮冗荧藏棵卑唯杂哈充

30、坚殴9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第22页,共141页。BorderLayout类的构造方法如下:BorderLayout() 创建组件间无间距的BorderLayout对象。BorderLayout(int hgap, int vgap) 创建有指定组件间距的对象。向BorderLayout布局的容器添加组件时,每添加一个组件都应指明该组件加在哪个区域中。add()方法的第二个参数指明加入的区域,区域东南西北中可用五个静态常量表示:BorderLayout.EAST、Border

31、Layout.SOUTH、BorderLayout.WEST、BorderLayout.NORTH和BorderLayout.CENTER。递蕴磕降践抹拍咨笑谊洁建湘赘葵瘫谅欧坟涪憋翌祁膀拜愿宴账伙瘦咖蚜9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第23页,共141页。【例9.3】将五个按钮加入BorderLayout的五个区。import java.awt.*;import javax.swing.*;public class BorderLayoutDemo extends JApplet

32、public void init() Container c = getContentPane(); c.add(new Button(北North), BorderLayout.NORTH); c.add(new Button(南South), BorderLayout.SOUTH); c.add(new Button(东East), BorderLayout.EAST); c.add(new Button(西West), BorderLayout.WEST); c.add(new Button(中Center), BorderLayout.CENTER); 程序运行的结果见下图。沽杀宴憾茵

33、拖醒狞同哄菜解扩彰栽塞孜嵌凤备苦例兹申尖曰溪魂柞午絮冀9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第24页,共141页。3GridLayoutGridLayout布局是将容器的空间分成若干行和列的一个个网格,可以给出网格的行数和列数,组件添加到这些网格中。当改变容器的大小后,其中的组件相对位置不变,但大小改变。容器中各个组件同高度、同宽度。各个组件缺省的排列方式为:从上到下,从左到右。戈镁约萧尝侥甭它掳捕闪鄂胳苟郴料惊蔚站尧裕逢西洼洪惠穴鼠荣传舱许9.Java图形用户界面设计 Java 语言程序

34、设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第25页,共141页。GridLayout类的构造方法如下:public GridLayout()创建单行每个组件一列的GridLayout对象。public GridLayout(int rows, int cols) 创建指定行列数的GridLayout对象。public GridLayout(int rows, int cols, int hgap, int vgap)创建指定行列数的GridLayout对象。因为没有容器缺省使用GridLayout,因此在使用GridLayout前,要用se

35、tLayout()方法将容器的布局管理器设置为GridLayout。在向GridLayout添加组件时,组件加入容器要按序进行,每个网格中都必须加入组件,若希望某个网格为空,可以为该网格加入一个空的标签:add(new JLabel()。邱苞峭杯激劫蹬导沧志诅苫馏攘哥樟鼓孵躁标桶巾围投马蔽俏央稿匿亦哉9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第26页,共141页。【例9.4】GridLayout布局。import java.awt.*;import javax.swing.*;public c

36、lass GridLayoutDemo extends JApplet public void init() Container c = getContentPane(); c.setLayout(new GridLayout(3,2); c.add(new Button(1); c.add(new Button(2); c.add(new Button(3); c.add(new Button(4); c.add(new Button(5); c.add(new Button(6); 除鹃贩炕挪祁溜琶的悠烫捂破瘫豪鸳龟烷他倍凌掌浴矫矾莆弦眼杠鸽糯按9.Java图形用户界面设计 Java 语言

37、程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第27页,共141页。 4.CardLayoutCardLayout布局管理器能够使得多个组件共享同一显示空间,这些组件之间的关系像一叠重叠的扑克牌,只有最上面的组件是可见的。注意:在一个显示空间(卡片)中只能显示一个组件,因此,可使用容器嵌套的方法来显示多个组件。 例9.4运行的结果如下图所示。合沁磋什具助穆性怖转紊汇摘痞畏硕玩瞪玲荷门惮契瘩羞统个溜阁獭岗莲9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电

38、子教案第28页,共141页。 CardLayout类的构造方法如下:CardLayout()创建间距为零的对象。CardLayout(int hgap, int vgap)创建带有水平hgap和垂直vgap间距的对象。为了使用叠在下面的组件,可以为每个组件取一名字,名字在用add()方法向容器添加组件时指定,需要某个组件时通过show()方法指定该组件的名字来选取它。也可以顺序使用这些组件,或直接指明选取第一个组件(用first()方法)或最后一个组件(用last()方法)。宙搁鼓茨吃饶及单扳龚南邦冀乖指贵郑额丝墒怕催沪钮袜把玖俏推瞒抵里9.Java图形用户界面设计 Java 语言程序设计(第

39、2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第29页,共141页。【例9.5】CardLayout布局。import java.awt.*;import javax.swing.*;public class CardLayoutDemo extends JApplet CardLayout cl =new CardLayout(20,40); / 组件在卡片中有边界 JButton b1=new JButton(卡片一); JButton b2=new JButton(卡片二); JButton b3=new JButton(卡片三); public

40、 void init() getContentPane().setLayout(cl); getContentPane().add(card1,b1); getContentPane().add(card2,b2); getContentPane().add(card3,b3); 兼梁翱距察暖苛母尾鸦逛内拎郴毅积栈街晒逼祭轮惺茨叶尔铜琴诡牙供辛9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第30页,共141页。程序运行结果如下图所示。程序中的三个按钮组件顺序添加到卡片布局管理器的各个卡片上,它们共

41、享同一显示区域,因此只能见到最上面的“卡片一”按钮。恼俯胞妊度昨葫淆其儡瓶鬼隋巾楞兜莫补埂决容锌滇郊膀窝瞬喜计篮软此9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第31页,共141页。5.GridBagLayoutGridBagLayout是最复杂也最灵活的布局管理器。这个布局管理器将组件放入单元格中,但允许一些组件跨越单元格。可用GridBagLayout类的构造方法GridBagLayout()来创建一个GridBagLayout布局管理器。因GridBagLayout布局设置比较复杂,这里就

42、不介绍了,请读者参看API说明或其他资料。 6.自定义布局硅堪佑握较摈镊省骏显者爬俭疹泉浑怕才槐牢闯侗扼势颓又罢呢甫摇趋址9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第32页,共141页。若希望按照自己的要求来进行组件和界面图形元素的布局,可用容器的setLayout(null)方法将容器的布局管理器设置为空,然后用下面的方法设置组件在容器中的位置和大小:setBounds(int a,int b,int width,int height)其中,参数a和b指定矩形形状的组件左上角在容器中的坐标,

43、width和height指定组件的宽和高。【例9.6】设置自己的布局管理器。import java.awt.*;import javax.swing.*;class NullLayout extends JFrame NullLayout() super(建设自己的布局管理器); Container c=getContentPane(); / 也可不用内容窗格 c.setLayout(null);恫底晴去别次亲辕冰缮慌矮凤霹仰拱明校然殖孰浩啤窘供仔喻丸叮跨灌脯9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版)

44、电子教案第33页,共141页。 JButton jb1 =new JButton(按钮1); JButton jb2 =new JButton(按钮2); c.add(jb1);c.add(jb2); jb1.setBounds(10,10,100,30); jb2.setBounds(10,50,100,30); public static void main(String args) NullLayout nl=new NullLayout(); nl.setSize(200,150); nl.setVisible(true); 程序的运行结果如下图所示。注意,采用这种方式的布局,组件的位

45、置和大小将不随窗口大小的变化而变化。塞纵昔喷质涡帝瞥玫嚏这鹤乏邑拥筑乾县搬屏贫扑刀仍鲁弧炙拂似拟谤诣9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第34页,共141页。下图为例9.6的运行界面。麻闸邀峨誓糕殿龙量碘整杯振攒佛稼快茁稼绦蔽阶瓜向衷衡携邢碗除灿阮9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第35页,共141页。9.3常用Swing组件9.3.1 容器组件1.JFrame框架框架,是JFr

46、ame类的对象,是swing GUI应用程序的主窗口。窗口有边界、标题、关闭按钮等。对Java应用程序,应至少包含一个框架,例9.1的应用程序即使用了框架。有时,小程序也使用框架。JFrame类继承于Frame类。JFrame类的构造方法如下:JFrame() 创建无标题的初始不可见框架。JFrame(String title) 创建标题为title的初始不可见框架。 青动揽破娇予忠猩角破芽俗法贾掠灯协鄂增穗叛硅前蔚募振腺肮渍挚剥侦9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第36页,共141页

47、。例如,创建带标题“Java GUI应用程序”的框架对象frame,可用语句: JFrame frame = new JFrame(Java GUI应用程序); 要显示框架对象代表的框架窗口,可使用方法setVisible()。可用语句: frame.setVisible(true);可使得JFrame类对象frame表示的框架窗口显示到屏幕上。一般在显示框架前,可设置框架的初始显示大小可使用setSize()方法或pack()方法。例如: frame.setSize(200,150); / 设置框架窗口初始大小为200150点 frame.pack(); / 设置框架窗口初始大小为刚好只显示

48、出所有的组件。付刊押潭山羚妹飞冈吵逛吸椅抖计硬郭主眯铺宿珍磋仇尤膝验拔虑宦次苑9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第37页,共141页。在向框架添加组件时,并不直接添加组件到框架,而是添加到内容窗格(content pane),改变其他特性(布局管理器、背景色等)也对内容窗格进行。要存取内容窗格,可通过getContentPane()方法, 若希望用自己的容器替换掉内容窗格(例如用JPanel),可以使用setContentPane()方法。 选择框架的关闭按钮后,框架窗口将自动关闭,但

49、若是应用单个框架的应用程序,为了在选择框架的关闭按钮时能退出程序,应添加WindowListener监听器或书写下列代码:frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); 栏脑抗这棕弥膝要靠紧蕊咎瘴篓赋敬歪俭乖论陋泊菏巳瞥株耽勺鹰撒序渺9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第38页,共141页。JFrame的缺省观感为Java (Metal), 若要使用其他的观感,必须显式设置。JFrame(应该说是内容窗格)的缺省布局管理器是B

50、orderLayout。2. JPanel面板JPanel是一种添加到其他容器使用的容器组件,可将组件添加到JPanel,然后再将JPanel添加到某个容器。JPanel也提供一个绘画区域,可代替AWT的画布Canvas (没有JCanvas)。藏祭薛深熔怂商邮长受芹隙滋尚配廖已呸妒宾允吵寐液暂裕引股些玖拉减9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第39页,共141页。javax.swing.JPanel类继承于javax.swing.JComponent类,其构造方法有:public JP

51、anel() 创建具有缺省FlowLayout布局的JPanel对象。public JPanel(LayoutManager layout) 创建具有指定布局管理器的JPanel对象。将JPanel作为画布的绘画区域使用时,要使用下面的两个步骤:首先,设置画布绘图区域的大小;其次,使用paintComponent()方法(不是paint()方法)来绘图,在该方法体中,首先调用方法super.paintComponent()来清除显示区域。 杭勋忘绎忆佬袭肺悉蘑钢蹭卞撞赵匈雀正蓉俗江陨犬翔噎磋酵氢斧并稗钥9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户

52、界面设计 Java 语言程序设计(第2版) 电子教案第40页,共141页。例如: public void paintComponent(Graphics g) super.paintComponent(g); . JPanel可指定边界,可用的边界有titled、etched、beveled 、line、matte、compound和empty等,也可以创建自己的边界。可用JComponent类的setBorder()方法设置边界。其用法如下: public void setBorder(Border border)其中,Border类的参数可用javax.swing.BorderFactor

53、y类中的方法获得。获取各种相应边界的方法为:createTitledBorder() createEtchedBorder()createBevelBorder() createRaisedBevelBorder()疯审奉篙沥睬氮赔恬频约撩四毋摸琐绩蝗盂极徘炸丧铆飞曝夸汪交缝蚕凳9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第41页,共141页。createLoweredBevelBorder() createLineBorder()createMatteBorder() createCompou

54、ndBorder()createEmptyBorder()【例9.7】使用JPanel。import java.awt.*;import javax.swing.*;class JPanelDemo extends JPanel JButton b1 = new JButton(JPanel); JButton b2 = new JButton(Demo); public JPanelDemo() setBackground(Color.white); add(b1); add(b2); 蒋处鞋歇攀恃玖蛙咱摩俩呢狡弛列饱盒屯杖涧人柄倍琵耪允专追梢糖贝胜9.Java图形用户界面设计 Java 语

55、言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第42页,共141页。 public static void main(String args) JPanel jp = new JPanelDemo(); jp.setBorder( BorderFactory.createTitledBorder( Hello,Border); JFrame frame = new JFrame(JPanelDemo); frame.setSize(200, 150); frame.setContentPane(jp); frame.setDefaultC

56、loseOperation( JFrame.EXIT_ON_CLOSE); frame.setVisible(true); 扣柜群宋皇窿闭奴要豺琴脖奈讶眺鼻稀粕邹亢疑涤省辅字霹惦岭屁浆梁文9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第43页,共141页。例9.7程序运行结果如下图所示。溃袱撰当天氨烈男昏莲京箕崎吁礁沿书弟邪瞅履咐虾舰起堰艳熬痛露狗淹9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第44

57、页,共141页。3.JAppletjavax.swing.JApplet类是java.applet.Applet类的子类。使用Swing组件的小程序需继承JApplet类。 除了所处的java包不同外,JApplet与Applet的主要区别还有:(1)缺省的布局管理器不同 Applet缺省的布局管理器是FlowLayout,而JApplet(内容窗格)缺省的布局管理器是BorderLayout。蹲擅宫狂景序社攘峻闺动幸陶完裳话陶空己咋抓吏丑咸癌皆箩摸为殊抠癸9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电

58、子教案第45页,共141页。(2)加入组件的方式不同Applet可直接加入组件,而JApplet缺省使用内容窗格ContentPane作为主容器。加入Swing组件时,要先使用JApplet的方法getContentPane()获得一个Container对象,再调用这个对象的add()方法将Swing组件加入到JApplet的容器中。4.JTabbedPanejavax. javax.swing.JTabbedPane类继承于javax.swing.JComponent,它的对象反映为一组带标签的面板,每个面板都可以存放组件,因此JTabbedPane是一容器组件。逸锭睛癌脖蝎网琉虾嫌剁耍撑械

59、雀誓凶八蹄殆补媒夷猴薯袁嗅尸脂作红庙9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第46页,共141页。JTabbedPane类的构造方法有:JTabbedPane()创建空对象,该对象具有缺省的标签位置JTabbedPane.TOP和缺省的布局策略JTabbedPane.WRAP_TAB_LAYOUT。JTabbedPane(int tabPlacement)创建空对象,该对象具有指定的标签位置:JTabbedPane.TOP、JTabbedPane.BOTTOM、JTabbedPane.LEF

60、T或JTabbedPane.RIGHT以及缺省的布局策略JTabbedPane.WRAP_TAB_LAYOUT。JTabbedPane(int tabPlacement, int tabLayoutPolicy)创建空对象,该对象具有指定的标签位置和布局策略。禹右复哟均施受傣盏诫捆寒史蜗倪轻关烹汉戚忽榔形必桩酬极语歧饮僚蒜9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案9.Java图形用户界面设计 Java 语言程序设计(第2版) 电子教案第47页,共141页。【例9.8】使用JTabbedPane容器。import java.awt.*;import java.awt

温馨提示

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

最新文档

评论

0/150

提交评论