您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第1章 图形用户界面设计
1第一部分Java语言应用程序设计第1章图形用户界面程序设计第2章多线程应用第3章数据库应用程序设计第4章进销存管理系统2第1111章图形用户界面设计1.11.11.11.1窗体程序设计图形用户界面的构件一般包括菜单、输入输出组件、按钮、画板、窗口和对话框等,这些组件构成Java的抽象窗口工具包。Java语言提供了两种类型的图形用户界面包。在J2SE早期版本中,主要是awt图形用户界面包。它是一个强大的工具集。但是awt包隐藏着一个严重的问题,awt组件的设计是把与显示相关的工作和处理组件事件的工作都交给本地对等组件完成,因此用awt包编写出来的程序会在不同的操作平台上显示不同的效果。我们知道,Java是遵循“一次编译,到处运行”理念的,而awt包中图形组件的绘制方法却不能做到这一点。为了解决这个问题,Java在awt图形用户界面包的基础上,开发出了javax.swing图形用户界面包。javax.swing包内的组件称为swing组件。swing是由100%纯Java实现的,swing组件是用Java实现的轻量级(light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与awt组件的最大区别。由于awt组件通过与具体平台相关的对等类(Peer)实现,因此swing比awt组件具有更强的实用性。swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。swing组件没有本地代码,完全不依赖操作平台,而且在有更好的性能。swing组件的功能也有很大的增强,比如增加了剪贴板和打印支持功能等。swing组件除了保持awt组件原有组件之外,还增加了一个丰富的高层组件集合,如表格(JTable)、树(JTree)。我们把awt图形用户界面包称为awt组件,也称为重量组件,而把swing图形用户界面包称为swing组件,又称为轻量组件。1.1.1.1.1.1.1.1.1111JavaJavaJavaJava窗体JFrameJFrameJFrameJFrame类JFrame是带有标题、边框的顶层窗体。窗体是一个容器,在其内部可以添加其它组件。JFrame包含有标题栏、菜单、可放置其它组件的窗体内部区域和自带的按钮。其外观如图1.1所示:图1.1窗体的结构下面我们分别举例,说明构造JFrame对象设计一个最简单窗体及利用JFrame子类设计窗体的方法。【例1-1】最简单窗体的程序1importjavax.swing.*;2classEx1_13{4publicstaticvoidmain(String[]args)35{6JFramewin=newJFrame(最简单窗体);//实例化JFrame窗体对象7win.setSize(300,200);//设置窗体对象的大小8win.setVisible(true);//设置窗体对象的窗体可见9win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗体10}11}程序的运行结果如图1.2所示。图1.2最简单窗体【例1-2】通过构造JFrame子类创建最简单窗体。1importjavax.swing.*;2classEx1_2extendsJFrame3{4Ex1_2()//构造方法5{6setSize(300,200);//设置窗体大小7setVisible(true);//设置窗体可见8setTitle(最简单窗体);//设置窗体标题栏内容9setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗体10}11publicstaticvoidmain(String[]args)12{13newEx1_2();14}15}【程序说明】程序的第9行setDefaultCloseOperation(EXIT_ON_CLOSE)为设置窗体关闭按钮的关闭动作,如果没有该语句,当用户试图关闭窗口时,窗体只是隐藏,并没有真正从内存中退出。程序的运行结果与例1-1相同,如图1.2所示。1.1.2Java的界面布局原理在main()方法中实现窗体构造方法实例化窗体对象构造窗体构造窗体4因为Java是跨平台语言,使用绝对坐标显然会导致问题,即在不同平台、不同分辨率下的显示效果是不一样的。例如,在一个1024×768的分辨率屏幕下用绝对定位和绝对尺寸设计的界面,在640×480分辨率下一切可能会变样。设计比较完善的应用程序在每次启动时都会取得当前窗口的分辨率,再设置和布局当前窗口控件的坐标和大小。在Java中为了实现跨平台机制,引入了布局管理器来管理界面。通过这些管理器及其组合,能够设计出各种复杂的界面,而且在不同操作系统平台上都能够有一致的显示界面。布局管理器由setLayout()方法设置,其基本格式如下:voidsetLayout(LayoutManagerlayoutObj)1.1.1.1.1.1.1.1.3333常见的布局管理器1、流式布局管理器FlowLayout设置流式布局管理,可取值:FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHT,分别设置左、中、右对齐方式。setLayout(newFlowLayout(FlowLayout.LEFT));2、边界布局管理器BorderLayout设置边界布局管理,可取值:BorderLayout.EAST、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.NORTH、BorderLayout.CENTER,分别设置东、南、西、北、中的分布方式。3、网格布局管理器GridLayout设置网格布局管理,setLayout(GridLayout(intRows,intClos));1.1.1.1.1.1.1.1.4444界面布局应用示例【例1-3】设计一个可以实现字符串查找与替换功能的对话框。1、设计项目:字符串的查找与替换。2、功能要求:在一段文字内容中查找指定的字符串,找到后,可用其他文字内容替换当前的字符串。3、详细设计:本程序把业务逻辑层与表现层分开,定义了2个类,一个是实现窗体用户界面的表现层,另一个是实现查找与替换功能算法设计的业务逻辑层:窗体用户界面类TextFindReplace;查找和替换字符串算法类matchFun。(1)窗体用户界面类TextFindReplace的方法窗体用户界面类TextFindReplace方法的功能说明见表1-1。表1-1窗体用户界面类TextFindReplace的方法说明(2)查找和替换字符串算法类matchFun的方法:查找和替换字符串算法类matchFun方法的功能说明见表1-2。方法名功能说明Create();创建窗体,构建用户查找和替换字符串交互操作的界面。mouseClicked();处理鼠标单击事件,调用查找或替换的方法。5表1-2查找和替换字符串算法类matchFun的方法(3)查找字符串的核心算法这里用到了String类的二个方法:使用getCaretPosition()方法可以得到当前光标位置,也就是开始比较的位置。使用CharAt(intindex)方法可以得到当前字符串index位置上的一个字符;然后通过逐个字符比较,统计所查找到的相同字符的次数:while(is1.length()&&js2.length()){if(s1.charAt(i)==s2.charAt(j)){k=k+1;}}这里,s1是主字符串,s2是要查找的字符,k为查找到相同字符的次数。(4)替换字符串的核心算法首先重复前面的查找过程,找到要替换字符的位置。然后把要替换的主字符串转换成StringBuffer类型。再利用StringBuffer类的replace(inti,intj,Stringstr)方法从主串的第i位开始替换,共替换j个字符,用字符str替换。4、程序设计实现/*******************************************程序文件名称:TextFindReplace.java*功能:字符串的查找与替换******************************************/1importjavax.swing.*;2importjava.awt.*;3importjava.awt.event.*;4classtextextendsJFrameimplementsActionListener5{6privateJTextAreatarea;7privateJTextFieldtfObj1,tfObj2;8privateJButtonbtnFind;9privateJButtonbtnReplace;10privateJButtonbtnExit;11privateJPanelpObj1,pObj2,pObj3,pObj4,pObj5;12privateJLabellabObj1,labObj2,labObj3;13booleanboolObj=false;14JDialogdiaObj;方法名功能说明strFind();实现从光标位置处开始查找字符串功能。strReplace();实现字符串替换功能。615JLabeltextLab;16JButtonbutObj2=newJButton(OK);1718text()19{20setTitle(文本的查找与替换);21setSize(500,200);22setVisible(true);23setDefaultCloseOperation(EXIT_ON_CLOSE);24tarea=newJTextArea();25JScrollPanescroller=newJScrollPane(tarea);26tfObj1=newJTextField();27tfObj2=newJTextField();28btnFind=newJButton(Find);29btnReplace=newJButton(Replace);30btnExit=newJButton(Exit);31labObj1=newJLabel(文本区域(从光标处开始查找):);32labObj2=newJLabel(待查找或替换前的字符串:);33labObj3=newJLabel(替换后的字符串:);34pObj1=newJPanel();35pObj2=newJPanel();36pObj3=newJPanel();37pObj4=newJPanel();38pObj5=newJPanel();39pObj1.setLayout(newBorderLayout());40pObj1.add(North,labObj1);41pObj1.add(Center,scroller);42pObj2.setLayout(newBorderLayout());43pObj2.add(North,labObj2);44pObj2.add(Center,tfObj1);45pObj3.setLayout(newBorderLayout());46pObj3.add(North,labObj3);47pObj3.add(Center,tfObj2);48pObj4.setLayout(newFlowLayout(49FlowLayout.CENTER,20,20));50pObj4.add(btnFind);51pObj4.add(btnReplace);52pObj4.add(btnExit);初始化三个按钮,分别用来实现“查找”、“替换”和“退出”操作定义用于输入待查找或替换字符的文本框和用于输出替换后的字符串的文本框定义三个Label对象显示提示信息定义5个Panel对象用于控制主界面上各组件的位置和大小面板pobj1用于控制文本区域和提示信息的相对位置面板pobj2用于控制第一个文本框和提示信息
本文标题:第1章 图形用户界面设计
链接地址:https://www.777doc.com/doc-4150231 .html