第9章 身无彩凤双飞翼心有灵犀一点通-图形用户界面_第1页
第9章 身无彩凤双飞翼心有灵犀一点通-图形用户界面_第2页
第9章 身无彩凤双飞翼心有灵犀一点通-图形用户界面_第3页
第9章 身无彩凤双飞翼心有灵犀一点通-图形用户界面_第4页
第9章 身无彩凤双飞翼心有灵犀一点通-图形用户界面_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

10-3月-25零基础快乐学Java人机交互技术的应用人机交互技术的应用人机交互技术的应用苏堤春晓秀平湖秋月明沧海一声笑碧天万里行西子盛装迎宾客南国新月照上宾江山似锦上联春夏秋冬风光各异下联东西南北气象不同设计简单界面项目目标:完成如图所示的一个登录界面,点击“登录”按钮时弹出“请您注册”的提示框,点击“取消”按钮时关闭该界面。设计思路:(1)完成界面设计。依据以往所学的内容“画”出界面中的相应内容。(2)点击按钮时实现项目目标所要求的相应功能。分析:首先,将汉字、输入框及按钮等多种元素一一“画”上去。其次,对不同元素进行有序摆放,保证能呈现出比较整齐美观的界面。最后,完成简单的人机交互功能。

目录画按钮按钮功能的实现登录界面的实现1图形用户界面登录界面2

举一反三3

界面高级组件41.1画按钮//凸起的按钮g.setColor(Color.white);g.drawLine(100,100,180,100);//画线,起点(100,100),终点(180,100)g.drawLine(100,100,100,130);g.setColor(Color.black);g.drawLine(180,100,180,130);

g.drawLine(100,130,180,130); 1.2按钮功能的实现①首先,用于接收和处理事件的方法位于java.awt.event包下,因此需要加载该包:importjava.awt.event.*;。②其次,让监听器具备处理鼠标事件的能力的方法为:classMyPanextendsJPanelimplementsMouseListener{……}③最后,按钮所在的位置是事件源,鼠标点击它则会触发事件,事件由谁来监管和处理需要事件源提前授权,这个过程即为注册监听器,代码为:事件源.addMouseListener(监听对象);。1.3登录界面的实现JLabelname=newJLabel("用户名");//创建标签JTextFieldtext=newJTextField();//创建文本框JPasswordFieldpassword=newJPasswordField();//创建密码框JButtonlogin=newJButton("登录"); //创建登录按钮login.addActionListener(newAction());//注册事件监听器classActionimplementsActionListener{//监听动作事件的类publicvoidactionPerformed(ActionEvente){//事件发生后的处理方法 JOptionPane.showMessageDialog(null,"请您注册");//弹出消息对话框 }}

目录1图形用户界面登录界面2

举一反三3

界面高级组件4接口与抽象类图形用户界面布局管理事件处理机制2.1接口与抽象类鱼菜吃的东西出去一趟办事抽象1.abstract类抽象类是没有具体对象的概念类,是一个具有共有属性和方法的集合,任一个子类都是该类的特殊化。如:abstractclassA{……}抽象方法是没有方法体的方法,用;表示声明结束。如:abstractvoidmethod([参数]);2.1接口与抽象类2.抽象类的特点含有抽象方法的类抽象类,而抽象类中不一定有抽象方法。如果一个子类没有实现抽象父类中所有的抽象方法,则子类也成为一个抽象类。抽象类不能产生对象,为避免类产生对象可以将一个类声明为abstract。没有方法体的方法就是抽象方法。构造方法、静态方法、私有方法、final方法不能被声明为抽象的方法。2.1接口与抽象类[public]interface接口名称[extends父接口名列表]{[public][static][final]数据类型变量名=常量值;//静态常量[public][abstract]返回值类型方法名(参数列表);//抽象方法}允许接口多继承3.接口的声明2.1接口与抽象类和public类一样,public接口名需与文件名相同。接口中的方法都是abstract的,用“;”结束。接口中不含构造方法,不能用来创建对象。接口中的域和方法都有public访问权限,不能用private和protected等来修饰。接口中不允许定义一般的成员变量。示例

4.接口的特点2.1接口与抽象类一个类实现接口时定义格式如下:[修饰符]class类名[extends父类名]implementsA,

B,…{

类的成员变量和成员方法;}注:1)类单继承、接口多实现。2)非抽象类实现接口需重写所有方法,并显式使用public访问控制符。允许实现多接口5.接口的实现2.1接口与抽象类Java用户界面元素均是以“类”的形式出现的。为了方便用户,Java设计了专门的“类库”,对组件绘制方式系统已提供。希望只写一次代码却能在不同平台上呈现满意的显示效果和交互特性。Java提供的组件库有AWT、Swing和SWT。2.2图形用户界面AWT(AbstractWindowToolkit)(重量级):

基于操作系统本身,调用系统本身的UI组件库。为与C、C++进行兼容Java进行了封装。优点是简单、稳定、速度快;缺点:缺乏平台的独立性。Swing组件(轻量级):

基于Java的,依赖于AWT,具有更丰富、更灵活的功能。优点:实现跨平台性。缺点是版本间变化大,速度和效率较慢。Sample7_1示例SWT组件:

由Eclipse提供,为各平台提供独立的界面组件,运行效率强于Swing,但使用范围受限。2.2图形用户界面图1Java包中部分类的层次关系图2.2图形用户界面容器(Container)是实际上含有多组组件或其他容器的屏幕窗口。容器类使用add()添加子组件。

AWT中的两种主要容器类型:1)java.awt.Window:顶级容器,不能被放入另一容器中。2)java.awt.Panel:不能独立存在,必须放到另一容器中。

Swing容器以”J”开头,如:JFrame,JContentPane,JPanel,JApplet等。2.2图形用户界面Swing根据组件之间的依附关系分为3层结构:框架、面板、组件。常用组件:Jlabel、Jbutton、JPanel、JTextArea、JScollPane、JTextField和JPasswordField(口令文本框,

JTextField的子类)2.2图形用户界面2.3布局管理器几种版面管理器分别是:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout、Boxlayout.每一个容器组件都有一个默认的布局管理方式,Container默认为BorderLayout.设定布局管理方式用setLayout()方法.2.3布局管理器FlowLayout(流布局管理器)它将组件从左向右按顺序布置安放在窗口这个容器中,一行放不下自动换下一行。FlowLayout构造方法:FlowLayout()//居中对齐,水平和垂直间距5FlowLayout(intalign)//指定对齐方式FlowLayout(intalign,inthgap,intvgap)//指定对齐方式,水平和垂直间距2.3布局管理器

FlowLayout布局中的对齐方式有3种:

FlowLayout.LEFT(左对齐)

FlowLayout.RIGHT(右对齐)

FlowLayout.CENTER(居中对齐)程序示例注:pack()是将界面窗口设置为自适应大小.FlowLayout布局特点:改变窗口大小,则组件的排列将自动换行,相随变化;组件的顺序和尺寸是固定的,不随窗口的缩放而改变.所设定的窗口大小若不能完全容纳组件则不会全部显示.2.3布局管理器

BorderLayout(边界布局管理器)将版面按东、南、西、北、中5个区域划分,可以非常方便地将组件放置在这5个区域中任何一个。这5个区域分别是:BorderLayout.EAST,BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.WEST,BorderLayout.CENTER。2.3布局管理器BorderLayout构造方法:

BorderLayout()//组件间无间距

BorderLayout(int

hgap,int

vgap)//指定水平和垂直间距BorderLayout下组件的加入:add(newJButton(“North”),BorderLayout.NORTH)BorderLayout布局特点:改变窗口大小组件的排列方式不变,尺寸随窗口改变.东西宽度固定,南北高度固定.2.3布局管理器GridLayout(网格布局管理器)纵横格线所分割的网格,每个网格的大小尺寸一样。安放的顺序从左上角的格子开始,从左至右。一行放满之后折到下一行。构造方法有:GridLayout();GridLayout(introws,intcols);GridLayout(introws,intcols,inthgap,intvgap)。2.3布局管理器注:无参构造方法生成一个单行的网格布局管理器。行数和列数不能同时为0,其中有一个为0则保证另一参数所指定的行或列。例:GridLayout(3,0)则保证行数,列可以无限长。网格数与组件数不等时要先保证行数。改变窗口的大小组件的排列方式和行列间距均不变.所有组件同宽高,尺寸会随窗口的缩放而改变.2.3布局管理器CardLayout(卡片布局管理器)提供一种像管理一系列卡片一样管理组件的功能,但同一时刻容器只能显示一个组件,这个被显示的组件将占据所有的容器空间。常用的构造方法有:CardLayout();常用的成员方法有:voidfirst(容器对象);voidlast(容器对象);voidnext(容器对象);voidprevious(容器对象);voidshow(容器对象,卡片名称);//显示指定名称卡片2.3布局管理器BoxLayout可以指定在容器中是否对控件进行水平或者垂直放置,比FlowLayout要更为灵活.GridBagLayout是Swing当中最灵活也是最复杂的布局管理器,可对控件在容器中的位置进行比较灵活的调整.

GridBagLayout的特点:

1、GridBagLayout管理的所有行和列都可以是大小不同的.

2、GridLayout把每个组件限制到一个单元格,而GridBagLayout并不这样:组件在容器中可以占据任意大小的矩形区域.

2.3布局管理器JPanel也是Java程序设计中常用的容器类,它除了可以让组件加入外,还可以使版面的管理更加有效和容易。JPanel的构造方法:

JPanel()//创建一个流布局面板

JPanel(Layoutmangerlayout)//创建一个指定布局的面板

例:JPanelp=newJPanel(newBorderLayout());

JPanel示例另外,JPanel支持双缓冲功能,可以使动画在播放过程中非常流畅,一般不会有画面闪烁的情况发生。所以,如果在Java程序中有动画内容,最好使用JPanel容器类来构造GUI。2.3布局管理器Java的图形用户界面(GUI)里都是由事件驱动构成的,每当用户在GUI中按下一个按钮、移动了鼠标、选择了一项菜单、点击一个图标等等都会触发一件对用户有影响的事,这就是Java事件。程序示例ClickMe.java2.4事件与事件源事件源

在Java的事件处理机制中引入了委托事件模型。就是将整个事件的处理的责任委托给指定的对象,当该组件发生指定的事件时,就通知所委托的对象,由该对象来处理这个事件。

1)委托人?

2)被委托人?3)委托方式?

4)处理方式?2.4事件处理机制监听对象或监听器事件源注册监听器被委托人处理2.4事件处理机制问题1:简述java事件处理机制?什么是事件?什么是监听器?如何进行事件注册?怎样处理事件?一个事件源可以注册多个监听器多个事件源可以注册同一监听器2.4事件处理机制问题1:简述java事件处理机制?什么是事件?什么是监听器?如何进行事件注册?怎样处理事件?1、设置监听器类(设立监管部门)2、设定处理方案3、事件源注册监听器(告知服务对象)单击按钮、单行文本框、菜单项等组件均可产生ActionEvent事件。事件处理三要点:(1)定义一个实现ActionListener(监听器)接口的类;(2)用addActionListener方法给组件设置监听(对事件源注册监听器,可以多个);(3)重写actionPerformed方法。2.4事件处理机制——示例Test,Test1,Test22.4事件处理机制问题2、实现Listener的方法有哪几种?匿名类和内部类之间有联系吗?它们有什么区别?委托别人(外类实现)newOutClass()自己处理(本类实现)this委托家里人(内部类实现)newInClass()现场办公(匿名类实现)newActionListener()2.4事件处理机制问题3、用for循环创建50个button,每个button的text为001、002……050,实现当点击一个button时,获取这个button的text。个人疑问:for循环创建button当然都能实现,使用gettext()获取text也容易,但是由于每个button没有各自的名字,所以在监听器的方法里无法针对点击到的那个button。实现接口ActionListener,MouseMotionListener,MouseListener,KeyListener,WindowListener……继承适配器类MouseAdapterMouseMotionAdapterWindowAdapter……2.4实现事件处理的方式示例:demo.addWindowListener(newA());classAextendsWindowAdapter{publicvoidwindowClosing(WindowEvente){

System.out.println("ClosingWindow");

System.exit(0);} }或者classAimplementsWindowListener{……}

目录1举一反三登录界面3图形用户界面2

界面高级组件4个性计算器美食的诱惑打字母游戏3.1个性计算器项目目标:依据PC机或智能手机终端的计算器界面(如图9.20所示),设计一款个性化的计算器,可以依照自己喜好来设计颜色或界面布局,并实现简单的加、减、乘、除及清零等功能。设计思路:(1)完成界面设计。(2)实现计算功能。项目目标:

将整个窗体分成左右两块面板,左边模拟鼠标事件,右边模拟鼠标运动事件。具体而言,可以在左右界面各画一个小球,当鼠标单击左界面某个位置时,小球缓慢滚动到所单击的位置;当在右界面中按住鼠标移动时,小球跟着鼠标移动。为了使界面更为活泼,可以将小球换成图片,并加上故事情节,让整个模拟过程变得更为生动、有趣。设计思路:

(1)完成界面设计。

(2)实现对鼠标事件(MouseListener)和鼠标运动事件(MouseMotionListener)的操作。3.2美食的诱惑3.2美食的诱惑3.3打字母游戏项目目标:屏幕上随机产生的英文字母在不断下落,通过敲击键盘上的键来消除屏幕上对应的字母。具体而言,假设屏幕上一次性随机产生10个字母,它们按照一定的速度下落,玩家通过敲击键盘来消除字母,获得积分。当所敲击的字符与屏幕上某个字母匹配时,该字母就在屏幕上消失,如果有多个相同字母则消掉最下面的一个,同时记分器加10分;如果没有匹配正确或是字母落到屏幕下方,记分器则减掉100分。初始成绩为1000分,当成绩达到1200分时弹出“恭喜第几关闯关成功!”的对话框,关闭对话框后字母下落速度加快。当成绩变为0分时自动退出游戏。设计思路:(1)同雪花下落的原理相同,只需将雪花改为随机字母,数组长度改为10即可。当字母下落到界面下时,在屏幕上端随机位置产生一个新的字母,这样可以保证屏幕上的字母源源不断。(2)在屏幕右上角用drawString()方法做一个计分器,用来显示分数值。设定当分数增加到1200时弹出对话框,分数减少到0时退出游戏,并通过改变休眠时间来调整字母下落速度。(3)实现对键盘事件(KeyListener)的响应。当键按下时比对字符,匹配正确时将该字母的纵坐标值设为0,同时分数值加10分。如果没有匹配正确,那么分数减100,字母继续下落,达到界面边界时分数减100。

(4)针对游戏中存在的问题进行改进。3.3打字母游戏

目录1界面高级组件登录界面4图形用户界面2

举一反三3单选钮、复选框与组合框文本框、文本区和滚动面板选项窗格、滑杆、进度条、表格、树菜单、对话框4.1单选钮、复选框与组合框JRadioButtonJCheckBoxJComboBoxButtonGroup单选按钮组组合框.addItem("18以下");界面上添加组合框界面上添加单选钮4.2文本框、文本区和滚动面板JTextFieldJTextAreaJScorllPaneJTextFieldjt=newJTextField("手机号/QQ号",28);//文本框JPasswordFieldjp=newJPasswordField(28);//密码框jp.setEchoChar('#');//设置回显字符JTextAreajta=newJTextArea("请输入城市、乡镇、街道、门牌号等",7,35);JScrollPanejsp=newJScrollPane(jta);//将文本区包裹进滚动面板4.3选项窗格、滑杆、进度条、表格、树4.3选项窗格、滑杆、进度条、表格、树JTabbedPaneJProgressBarJSlidertab.addTab("滑杆和进度条",tabOne());//添加滑杆和进度条面板JProgressBarpb=newJProgressBar();//定义进度条//定义水平滑杆,取值0-100,滑块处于45的位置JSliders=newJSlider(JSlider.HORIZONTAL,0,100,45);s.setPaintTicks(true);//绘制滑杆间隔标记s.setMajorTickSpacing(20);//主刻度尺s.setMinorTickSpacing(5);//小刻度尺s.setBorder(newTitledBorder("移动滑杆"));//设置滑杆标题pb.setModel(s.getModel());//进度条与任务源挂接pb.setStringPainted(true);//在进度条中显示完成进度的百分比JScrollPanetabThree(){//定义树

JTreetree=newJTree();//构造一个系统默认的树对象

returnnewJScrollPane(tree);//将树放在滚动面板中}JTable4.3选项窗格、滑杆、进度条、表格、树JScrollPanetabTwo(){//定义表格

String[]head={"学号","姓名","性别","课程","成绩"};

Object[][]data={//二维数组

{"2022010001","张小平","男","Java程序设计","90"},…};

JTabletable=newJTable(data,head);//定义表格

returnnewJScrollPane(table);//给表格包裹滚动条}JTree4.3选项窗格、滑杆、进度条、表格、树前面构建的是系统默认的树,构建特殊的树用DefaultMutableTreeNode类及add()方法来完成,该类位于javax.swing.tree包下。//定义树顶点DefaultMutableTreeNodetop=newDefaultMutableTreeNode("系统工具");//定义树节点DefaultMutableTreeNodenode1=newDefaultMutableTreeNode("任务计划程序");//将节点加入树

top.add(node1);//将子节点加入树

node1.add(newDefaultMutableTreeNode("Microsoft"));JTreetree=newJTree(top);//构造一个系统默认的树对象JScrollPanejspane=newJScrollPane(t

温馨提示

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

评论

0/150

提交评论