人机交互实验报告

学 生 实 验 报 告

课程名称:

学生学号:

所属院部:

(理工类)

人机交互技术 专业班级: 12软件工程(Z)

1205107014 学生姓名: 陈爽

软件工程学院 指导教师: 陈圣国

20 14 ——20 15学年 第 2 学期

金陵科技学院教务处制

实验报告书写要求

实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用A4的纸张。

实验报告书写说明

实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。

填写注意事项

(1)细致观察,及时、准确、如实记录。 (2)准确说明,层次清晰。

(3)尽量采用专用术语来说明事物。

(4)外文、符号、公式要准确,应使用统一规定的名词和符号。 (5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。

实验报告批改说明

实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。

实验报告装订要求

实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

实验项目名称:图形用户界面设计 实验学时: 8 同组学生姓名: 全班同学 实验地点: A205 实验日期: 2015/03/26 实验成绩: 批改教师: 陈圣国 批改时间: 一、实验目的和要求

1、实验目的

1) 熟悉图形用户界面的设计原则

2)利用一种设计工具完成图形化的用户界面设计 2、实验要求

(1)记录系统分析及层次结构设计的过程,调试程序要记录调试过程中出现的问题及解决办法;

(2)编写程序要规范、正确,上机调试过程和结果要有记录,不断积累编程及调试经验;

(3)做完实验后给出本实验的实验报告。

二、实验仪器和设备

奔腾以上计算机,Windows XP 、Eclipse

三、实验过程

利用常用的设计工具完成一个简单的绘图软件,要遵循界面设计的一般原则,注意颜色的使用,用户能够利用鼠标绘制直线或圆、矩形等简单的图形,跟踪用户的鼠标移动,实现橡皮筋效果。

主要步骤: (1) 熟悉开发环境

在本次实验中,我主要用到的工具是Eclipse,但是要用Eclispe必须要有jdk的支持,我首先下载了1.7版本的jdk,然后进行安装并配置了classpath和path环境变量,最后下载到eclipse工具,我就可以进行开发了! (2) 分析所要实现的功能

根据老师的要求,我要实现的功能有二: 1. 根据鼠标的移动绘制直线 2. 根据鼠标移动绘制圆

在我看来虽然是两个功能,但是实现原理都差不多,主要用到了swing组件和监听

器的知识,即在鼠标按下的时候触发监听器记录下鼠标点击位置的坐标,然后在鼠标拖动的过程中触发鼠标拖动监听器记录鼠标拖动到的位置,然后用背景色在原来的位置再绘制一遍图形,也就是覆盖原来的图形,接着在鼠标拖动到的位置处用区别于背景色的颜色再绘制图形,基本上原理就是这样! (3) 编程实现

首先我写了一个继承JFrame的类Draw类,该类中初始化了窗口中的控件,还包含了一个内部类CDraw类,它继承了Canvas类,内部类中主要设置了监听器用于监听鼠标点击、拖动等事件,当事件被触发事将会记录位置或者绘制图形,具体代码如下:

import java.awt.BorderLayout; import java.awt.Button; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; importimport java.awt.Point;

import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JRadioButton;

public classextends JFrame {

private static JRadioButton RBDrawLine,RBDrawRound; private int isLine=1;//判断是画直线还是画圆 1代表画直线

public void initView(){

this.setBackground(Color.black); this.setTitle("画图工具");

this.setLayout(new BorderLayout()); JPanel panel=new JPanel();

RBDrawLine = new JRadioButton("直线",true); RBDrawRound = new JRadioButton("圆");

ButtonGroup bg = new ButtonGroup(); //按钮组 bg.add(RBDrawLine); //加入按钮组 bg.add(RBDrawRound); panel.add(RBDrawLine); panel.add(RBDrawRound);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(600, 400); this.setVisible(true);

this.add(new Button(),BorderLayout.NORTH); this.add(panel,BorderLayout.NORTH); MDrawLine(); judgeRB();

this.setVisible(true);

}

public void judgeRB(){

if(RBDrawLine.isSelected()){

isLine=1;

}else{

isLine=0;

}

} public void MDrawLine() {

this.getContentPane().add(new CDraw()); }

class CDraw extends Canvas implements MouseListener,MouseMotionListener{

private static final long serialVersionUID = 1L; Point start,end,lastEnd; public CDraw(){ this.setBackground(Color.magenta); start=end=lastEnd=null; this.addMouseListener(this); this.addMouseMotionListener(this); } @Override

public void mouseReleased(MouseEvent e) { 事件 // TODO Auto-generated method stub end=new Point(e.getX(),e.getY());

repaint();

}

//鼠标释放

事件

@Override

public void mousePressed(MouseEvent e) { //鼠标按下 }

@Override

public void mouseExited(MouseEvent e) { }

@Override

public void mouseEntered(MouseEvent e) { }

@Override

public void mouseClicked(MouseEvent e) { }

@Override

public void mouseMoved(MouseEvent e) { }

@Override

public void mouseDragged(MouseEvent e) { }

// TODO Auto-generated method stub

lastEnd=end; //lastStart=start;

end=new Point(e.getX(),e.getY()); repaint();

// TODO Auto-generated method stub

// TODO Auto-generated method stub

// TODO Auto-generated method stub

// TODO Auto-generated method stub

// TODO Auto-generated method stub start=new Point(e.getX(),e.getY());

}

}

}

public void update(Graphics g){ }

paint(g); judgeRB(); if(isLine==1){ }

if(start!=null && lastEnd!=null){ }

if(start !=null && lastEnd!=null){ }

g.setColor(this.getBackground()); int LDX=Math.abs(lastEnd.x-start.x); int LDY=Math.abs(lastEnd.y-start.y); int r1=(int) Math.sqrt(LDX*LDX+LDY*LDY); g.drawOval(start.x, start.y, r1+r1, r1+r1); g.setColor(Color.blue);

int DX=Math.abs(end.x-start.x); int DY=Math.abs(end.y-start.y); int r2=(int) Math.sqrt(DX*DX+DY*DY); g.drawOval(start.x, start.y, r2+r2, r2+r2);

g.setColor(this.getBackground()); g.drawLine(start.x, start.y, lastEnd.x, g.setColor(Color.blue);

g.drawLine(start.x, start.y, end.x, end.y);

lastEnd.y);

}else{

做完了第一步,基本上就差不多了,接下来再写个测试类进行测试一下就OK啦!具体代码如下:

public class Test {

public static void main(String args[]){

Draw dr = new Draw();//新建对象 dr.initView();//执行初始化

}

四、实验结果与分析

1.我们运行程序可以看到如下界面,界面上部有两个按钮,我们可以通过来回切换按钮来确定是绘制直线还是圆

2、默然情况下直线的checkbox处于选中状态我们可以绘制直线了,还可以实现橡皮筋效果哦

3. 最后我们再来画个圆吧

五、讨论、思考

图形界面程序基于一个无穷的消息循环。直到退出消息时,程序才终止。而控制台程序是一个简单的直线型结构,运行到最后一段代码就停止。

在本次实验中,我主要复习了监听器和swing组件的知识,并体会到了人机交互对程序设计的重要性!

学 生 实 验 报 告

课程名称:

学生学号:

所属院部:

(理工类)

人机交互技术 专业班级: 12软件工程(Z)

1205107014 学生姓名: 陈爽

软件工程学院 指导教师: 陈圣国

20 14 ——20 15学年 第 2 学期

金陵科技学院教务处制

实验报告书写要求

实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用A4的纸张。

实验报告书写说明

实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。

填写注意事项

(1)细致观察,及时、准确、如实记录。 (2)准确说明,层次清晰。

(3)尽量采用专用术语来说明事物。

(4)外文、符号、公式要准确,应使用统一规定的名词和符号。 (5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。

实验报告批改说明

实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。

实验报告装订要求

实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

实验项目名称:图形用户界面设计 实验学时: 8 同组学生姓名: 全班同学 实验地点: A205 实验日期: 2015/03/26 实验成绩: 批改教师: 陈圣国 批改时间: 一、实验目的和要求

1、实验目的

1) 熟悉图形用户界面的设计原则

2)利用一种设计工具完成图形化的用户界面设计 2、实验要求

(1)记录系统分析及层次结构设计的过程,调试程序要记录调试过程中出现的问题及解决办法;

(2)编写程序要规范、正确,上机调试过程和结果要有记录,不断积累编程及调试经验;

(3)做完实验后给出本实验的实验报告。

二、实验仪器和设备

奔腾以上计算机,Windows XP 、Eclipse

三、实验过程

利用常用的设计工具完成一个简单的绘图软件,要遵循界面设计的一般原则,注意颜色的使用,用户能够利用鼠标绘制直线或圆、矩形等简单的图形,跟踪用户的鼠标移动,实现橡皮筋效果。

主要步骤: (1) 熟悉开发环境

在本次实验中,我主要用到的工具是Eclipse,但是要用Eclispe必须要有jdk的支持,我首先下载了1.7版本的jdk,然后进行安装并配置了classpath和path环境变量,最后下载到eclipse工具,我就可以进行开发了! (2) 分析所要实现的功能

根据老师的要求,我要实现的功能有二: 1. 根据鼠标的移动绘制直线 2. 根据鼠标移动绘制圆

在我看来虽然是两个功能,但是实现原理都差不多,主要用到了swing组件和监听

器的知识,即在鼠标按下的时候触发监听器记录下鼠标点击位置的坐标,然后在鼠标拖动的过程中触发鼠标拖动监听器记录鼠标拖动到的位置,然后用背景色在原来的位置再绘制一遍图形,也就是覆盖原来的图形,接着在鼠标拖动到的位置处用区别于背景色的颜色再绘制图形,基本上原理就是这样! (3) 编程实现

首先我写了一个继承JFrame的类Draw类,该类中初始化了窗口中的控件,还包含了一个内部类CDraw类,它继承了Canvas类,内部类中主要设置了监听器用于监听鼠标点击、拖动等事件,当事件被触发事将会记录位置或者绘制图形,具体代码如下:

import java.awt.BorderLayout; import java.awt.Button; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; importimport java.awt.Point;

import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JRadioButton;

public classextends JFrame {

private static JRadioButton RBDrawLine,RBDrawRound; private int isLine=1;//判断是画直线还是画圆 1代表画直线

public void initView(){

this.setBackground(Color.black); this.setTitle("画图工具");

this.setLayout(new BorderLayout()); JPanel panel=new JPanel();

RBDrawLine = new JRadioButton("直线",true); RBDrawRound = new JRadioButton("圆");

ButtonGroup bg = new ButtonGroup(); //按钮组 bg.add(RBDrawLine); //加入按钮组 bg.add(RBDrawRound); panel.add(RBDrawLine); panel.add(RBDrawRound);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(600, 400); this.setVisible(true);

this.add(new Button(),BorderLayout.NORTH); this.add(panel,BorderLayout.NORTH); MDrawLine(); judgeRB();

this.setVisible(true);

}

public void judgeRB(){

if(RBDrawLine.isSelected()){

isLine=1;

}else{

isLine=0;

}

} public void MDrawLine() {

this.getContentPane().add(new CDraw()); }

class CDraw extends Canvas implements MouseListener,MouseMotionListener{

private static final long serialVersionUID = 1L; Point start,end,lastEnd; public CDraw(){ this.setBackground(Color.magenta); start=end=lastEnd=null; this.addMouseListener(this); this.addMouseMotionListener(this); } @Override

public void mouseReleased(MouseEvent e) { 事件 // TODO Auto-generated method stub end=new Point(e.getX(),e.getY());

repaint();

}

//鼠标释放

事件

@Override

public void mousePressed(MouseEvent e) { //鼠标按下 }

@Override

public void mouseExited(MouseEvent e) { }

@Override

public void mouseEntered(MouseEvent e) { }

@Override

public void mouseClicked(MouseEvent e) { }

@Override

public void mouseMoved(MouseEvent e) { }

@Override

public void mouseDragged(MouseEvent e) { }

// TODO Auto-generated method stub

lastEnd=end; //lastStart=start;

end=new Point(e.getX(),e.getY()); repaint();

// TODO Auto-generated method stub

// TODO Auto-generated method stub

// TODO Auto-generated method stub

// TODO Auto-generated method stub

// TODO Auto-generated method stub start=new Point(e.getX(),e.getY());

}

}

}

public void update(Graphics g){ }

paint(g); judgeRB(); if(isLine==1){ }

if(start!=null && lastEnd!=null){ }

if(start !=null && lastEnd!=null){ }

g.setColor(this.getBackground()); int LDX=Math.abs(lastEnd.x-start.x); int LDY=Math.abs(lastEnd.y-start.y); int r1=(int) Math.sqrt(LDX*LDX+LDY*LDY); g.drawOval(start.x, start.y, r1+r1, r1+r1); g.setColor(Color.blue);

int DX=Math.abs(end.x-start.x); int DY=Math.abs(end.y-start.y); int r2=(int) Math.sqrt(DX*DX+DY*DY); g.drawOval(start.x, start.y, r2+r2, r2+r2);

g.setColor(this.getBackground()); g.drawLine(start.x, start.y, lastEnd.x, g.setColor(Color.blue);

g.drawLine(start.x, start.y, end.x, end.y);

lastEnd.y);

}else{

做完了第一步,基本上就差不多了,接下来再写个测试类进行测试一下就OK啦!具体代码如下:

public class Test {

public static void main(String args[]){

Draw dr = new Draw();//新建对象 dr.initView();//执行初始化

}

四、实验结果与分析

1.我们运行程序可以看到如下界面,界面上部有两个按钮,我们可以通过来回切换按钮来确定是绘制直线还是圆

2、默然情况下直线的checkbox处于选中状态我们可以绘制直线了,还可以实现橡皮筋效果哦

3. 最后我们再来画个圆吧

五、讨论、思考

图形界面程序基于一个无穷的消息循环。直到退出消息时,程序才终止。而控制台程序是一个简单的直线型结构,运行到最后一段代码就停止。

在本次实验中,我主要复习了监听器和swing组件的知识,并体会到了人机交互对程序设计的重要性!


相关内容

  • 基于oppo四种截屏方式的人机交互
  • 基于oppo 四种截屏方式的人机交互 1 背景介绍 笼统的来说就是人和计算机(或者其他电子设备)可以实现"交流":比如,你对计算机输入一个指令,计算机按你的需求进行工作,打个最简单的比方,你单击一下MP3上的播放键,MP3开始播放音乐,这可以算作是简单的人机交互.软件,是人们为了 ...

  • 工业工程专业学习及考研方向等问题(李耀昌)
  • 工业工程专业情况介绍及考研相关问题汇总 1.工业工程专业情况 例如,清华大学工业工程包括三个大的方向:人因工程.物流和生产制造. 1.1人因工程方向 清华大学"人因组"有三个实验室:人机交互及可用性研究实验室.生理工效学与安全工程实验室.虚拟现实及人机界面实验室. 1.1.1人机 ...

  • 数字程控交换系统 实验报告
  • <数字程控交换系统>实验报告 实验人:姓名 张 伟 学号 07005835 实验日期:2010报告日期:2010 年 4 月 17 日 年 5 月 9 日 登录终端号:MMC 登录用户名:admin 同组合作人员: 吴晓琪 祁猛 上机实习预备知识:联机软件HYCON HYCON 是S12 ...

  • 虚拟现实实验报告
  • 篇一:虚拟现实实验报告 实验一造型定位和旋转.缩放 一. 实验内容: 1. 熟悉vrmlpad 编辑器的安装和使用 2. 熟悉cortonaplayer 浏览器的安装和使用 3. 掌握虚拟造型的基本操作. 二. 实验环境: 1. 硬件环境 计算机一台 2. 软件环境 windowsxp 操作系统.v ...

  • 人机交互课程设计
  • <人机交互>综合设计报告 设计名称: 人机交互综合设计 选题名称:基于FrontPage的web界面--社交网页 姓 名: 李志祥 学 号: [1**********]4 专业班级: 09级计算机科学与技术应用班 系 (院): 计算机科学与信息工程学院 设计时间: 2012年5月26日 ...

  • 中国人机交互调研报告
  • 中国市场调研在线 行业市场研究属于企业战略研究范畴,作为当前应用最为广泛的咨询服务,其研究成果以报告形式呈现,通常包含以下内容: 一份专业的行业研究报告,注重指导企业或投资者了解该行业整体发展态势及经济运行状况,旨在为企业或投资者提供方向性的思路和参考. 一份有价值的行业研究报告,可以完成对行业系统 ...

  • 多媒体语言的构成分析
  • 学习资源 文章编号:1006-9860(2007)05-0060-04 总第244期中国电化教育2007.5 多媒体语言的构成分析 王润兰1,刘成锁2,黄嘉丰2 (1.河北师范大学信息技术学院,河北石家庄050016:2.河北师范大学新闻传播学院,河北石家庄050091) 摘要:伴随着多媒体技术的发 ...

  • 信息技术课题方案
  • "基于电子白板环境下的有效课堂教学的 研究"课题研究方案 温泉小学 信息技术教研组 一.课题提出的背景 随着网络资源的利用和计算机辅助教学的运用,黑板和粉笔已经部分地让位于多媒体投影和基于网络技术的电子阅览以及教师机控制学生机的多媒体教学.这无疑为课堂教学效率的提高提供了坚实可靠 ...

  • 浅谈人机交互的发展
  • 浅谈人机交互的发展 一.人机交互技术 自从1946年第一台计算机ENIAC问世以来,在计算机领域内,曾研制了各式各样的新技术和新产品,有些"长盛不衰",有些则是"昙花一现",总结它们盛.衰的缘由,可以得出这样一个规律,即:凡有助于缩小人机隔阂,有助于建立和谐人 ...