logo资料库

基于JAVA的图像处理软件.pdf

第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
资料共36页,剩余部分请下载后查看
成绩: JAVA 编程 B 实验报告 实验七: 基于 JAVA 的 图像处理软件 实验时间:2012年 6月10 日星期日
JAVA 编程 B 实验报告 一、实验名称 Java 编程 B 综合性实验 二、实验目的 1、掌握J2SE应用程序的设计 。 2、掌握抽象窗口工具包AWT的使用。 3、掌握应用程序用户界面的开发工具包 SWING 的使用 三、实验平台 操作系统: Windows 7 JDK:JDK 1.7 IDE:Eclipse 3.5 四、 结构框图 打开程序 打开文件 缩放 旋转 图 像 灰 度 变形 扭曲 缩小 放大 90 度 180 270 灰度 直方 拉 展宽 扭曲 五、实验内容 1、抽象窗口工具包(Abstract Window Toolkit,AWT)简介 1
功能:包含用于创建用户界面和绘制图形图像的所有类。 描述:包含用于创建用户界面和绘制图形图像的所有类。在AWT术语中,诸 如按钮或滚动条之类的用户界面对象称为组件。Component 类是所有AWT组件的 根。有关所有AWT组件的公共属性的详细描述,请参见 Component。 当用户与组件交互时,一些组件会激发事件。AWTEvent 类及其子类用于表 示AWT组件能够激发的事件。有关AWT事件模型的描述,请参见 AWTEvent。 容器是一个可以包含组件和其他容器的组件。容器还可以具有布局管理器,用来 控制容器中组件的可视化布局。AWT 包带有几个布局管理器类和一个接口,此接 口可用于构建自己的布局管理器 2、用户界面的开发工具包Swing简介 Swing是一个用于开发Java应用程序用户界面的开发工具包,以抽象窗口工 具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing 开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创 建优雅的用户界面。 创建图形界面步骤:(1)导入Swing包;(2)选择界面风格;(3)设置顶层 容器;(4)设置按钮和标签;(5)将组件放到容器上;(6)为组件增加边框;(7) 处理事件;(8)辅助技术支持。 导入Swing包 下面语句导入Swing包 import javax.swing.*; 大部分Swing程序用到了AWT的基础底层结构和事件模型,因此需要导入两个 包: import java.awt.*; import java.awt.event.*; 如果图形界面中包括了事件处理,那么还需要导入事件处理包: import javax.swing.event.*; 选择界面风格 Swing允许选择程序的图形界面风格常用的有java风格,windows风格等。 下面的代码用于选择图形界面风格,这里选择的是跨平台的Java界面风格。 try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName( )); } catch (Exception e) { } 设置顶层容器 图形界面至少要有一个顶级Swing容器,顶级Swing容器为其它Swing组件在 屏幕上的绘制和处理事件提供支持。常用的顶级容器: JFrame(框架):表示主程序窗口 JDialog(对话框):每个JDialog对象表示一个对话框,对话框属于二级窗 口 JApplet(小程序):在浏览器内显示一个小程序界面 一个框架包括边界、菜单栏、工具栏、状态栏,以及中间占主要部分的窗格。 窗格也可以看作是一种面板,但它是框架的一个组成部分;组件不会直接放到框 架上,而是放在若干个面板上,这些面板再放到窗格上。 用框架对象的getContentPane()函数来获得窗格,再调用窗格的add()函数 放置面板。 2
public static void main(String[ ]args){JFrame frame=new JFrame("SwingApplication"); JPanel panel1=new JPanel(); frame.getContentPane().add(panel1,BorderLayout.CENTER); ......// 添加其他组件 frame.pack();frame.setVisible(true);} 模式使用 关键是java.awt.*里面的两个与显示设备有关的类:GraphicsEnvironment 和GraphicsDevice。 GraphicsEnvironment为Java应用程序提供了特定平台的 GraphicsDevice 对象和 Font 对象集合。这些GraphicsDevice可以是各种本机和远端机器的资 源,如屏幕、打印机或者是Image Buffer,甚至是Graphics2D绘图方法的目标对 象。 而GraphicsDevice就是指特定的图形环境了,如屏幕和打印设备等。这样, 我们就可以用GraphicsDevice来操纵屏幕了。GraphicsDevice提供的 setFullScreenWindow()方法就是设置全屏幕用的。 事件处理 监听器:ActionListener 方 法:actionPerformed 事 件:ActionEvent ● String getActionCommand() actioncommand是控件内部的一个字符串,用于标识控件的状态。 此函数可以取得控件的状态,从而决定到底该做什么。 ● int getModifiers() 取得“产生此事件时,用户同时按下的组合键” ● long getWhen() 取得“产生此事件时的时间戳” 事件产生原因:点击按钮,在列表框中选择内容,在文本框中点回车,计时 器到期 监听器:AdjustmentListener 方 法:adjustmentValueChanged 事 件:AdjustmentEvent ● Adjustable getAdjustable() adjustable是一个接口,各种滚动条都实现了这个接口。 ● int getAdjustmentType() 取得滚动类型,共有UNIT_INCREMENT,UNIT_DECREMENT,BLOCK_INCREMENT, BLOCK_DECREMENT,TRACK共5种类型 ● int getValue() 取得滚动滑块的当前值 事件产生原因:滚动条的滚动 监听器:ItemListener 方 法:itemStateChanged 事 件:ItemEvent 3
● Objedt getItem() 取得被选中的元素。注意,返回值是Object,还应该进行强制类型转换。 ● ItemSelectable getItemSelectable() ItemSelectable是一个接口,代表那些包含了n个可供选择的子元素的对象。 此方法返回产生此事件的对象。此方法的作用主要在于,如果一个列表框是允许 多选的,那么上面的方法就不好用了,应该用此方法得到列表对象,再取得被选 中的多个元素。 ● int getStateChange() 取得选择的状态,是SELECTED还是DESELECTED 事件产生原因:各种按钮的点击,列表框的选择 监听器:FocusListener 方 法:focusGained、focusLost 事 件:FocusEvent ● Component getOppositeComponent() 得到“参与焦点变换的”另一个对象。如果是焦点取得事件,则返回之前拥 有焦点的对象;如果是焦点失去事件,则返回得到焦点的对象。若焦点转移到另 外一个应用程序,返回null ● boolean isTemporary() 焦点是临时性转移还是永久转移。临时性转移:用鼠标拖动窗口或者窗口变 为非激活状态。其他为永久性转移。 事件产生原因:各种组件的焦点变化 监听器:KeyListener 方 法:keyPressed、keyReleased、keyTyped 事 件:KeyEvent ● char getKeyChar() 此方法只在keytyped中有效,返回按下的字符。比如按下shift+a,返回'A' ● int getKeyCode() 取得键盘上按键的整数编码。请注意,是键盘上的按键,比如F1,Ctrl,Home 键等等,都有相应编码。不支持组合键,也就是说“Shift+a”和“a”返回同样 的内容,都是小写a的ASCII码。但是大键盘的数字键和小键盘的数字键返回内容 不同。 ● static String getKeyModifiersText(int modifiers) 将掩码转化为字符串,比如“Ctrl”,“Ctrl+Shift”等。注意它是static 方法 法 ● static String getKeyText(int keyCode) 返回keyCode代表的按钮的名字,比如"Home","F1"等。注意它是statci方 事件产生原因:在各种组件上敲击键盘 监听器:MouseListener 方 法:mouseClicked、mousePressed、mouseReleased mouseEntered、mouseExited 事 件:MouseEvent ● Point getLocationOnScreen() 返回鼠标相对于显示屏幕的绝对坐标(Java1.6版提供) 4
● int getXOnScreen() 返回鼠标相对于显示屏幕的X的绝对坐标(java 1.6版提供) ● int getYOnScreen() 返回鼠标相对于显示屏幕的Y的绝对坐标(java 1.6版提供) ● Point getPoint() 返回鼠标相对于组件的绝对坐标 ● int getX() 返回鼠标相对于组件的X的绝对坐标 ● int getY() 返回鼠标相对于组件的Y的绝对坐标 ● void translatePoint(int x, int y) 给鼠标的做用点加上一个偏移量。比如2个参数分别是10, 20,你要用鼠标 画直线,当你鼠标指向100,100开始画,实际上的线是画在110,120处 ● int getClickCount() 产生此事件时鼠标共点击了多少下(单击、双击、三击……) ● int getButton() 产生此事件时,鼠标的哪个键被点击了:NOBUTTON, BUTTON1, BUTTON2 或 者 BUTTON3 ● boolean isPopupTrigger() 是否能够触发一个弹出式菜单。由于各平台触发弹出式菜单的情况不一样, 因此应该在mousePressed 和 mouseReleased中都检测一下 事件产生原因:在任何组件上点击鼠标、将光标移动进来或出去 监听器:MouseMotionListener 方 法:mouseDragged、mouseMoved 事 件:MouseEvent 事件产生原因:在任何组件上移动鼠标 监听器:MouseWheelListener 方 法:mouseWheelMoved 事 件:MouseWheelEvent ● int getScrollType() 滚动的类型,是按块滚动WHEEL_BLOCK_SCROLL还是按单位滚动 WHEEL_UNIT_SCROLL ● int getScrollAmount() 返回为相应此事件应该滚动的单位数。此方法有效的前提是按单位滚动。 ● int getWheelRotation() 鼠标滚轮滚动过程中”咔嚓“声的数目。向上滚为负值,向下滚为正值 事件产生原因:在任何组件上滚动鼠标中键 监听器:WindowListener 方 法:windowOpened、windowClosing、windowClosed、windowIconified windowDeiconified、windowActivated、windowDeactivated 事 件:WindowEvent ● Window getWindow() 返回发生此事件的window对象 ● Window getOppositeWindow() 5
若发生了焦点转移,返回另一个参与此事件的window对象,或者null ● int getOldState() 窗口变化前的状态:NORMAL、ICONIFIED、MAXIMIZED_BOTH ● int getNewState() 窗口变化后的状态 事件产生原因:窗口发生变化 监听器:WindowFocusListener 方 法:windowGainedFocus、windowLostFocus 事 件:WindowEvent 事件产生原因:窗口得到或失去焦点 监听器:WindowstateListener 方 法:WindowstateChanged 事 件:WindowEvent 事件产生原因:窗口状态改变 四、代码分析 package imust.imageprocessing; package imust.imageprocessing; package imust.imageprocessing; package imust.imageprocessing; import java.awt.*; import java.awt.*; import java.awt.*; import java.awt.*; import java.awt.event.*; import java.awt.event.*; import java.awt.event.*; import java.awt.event.*; java.awt.image.*; import import java.awt.image.*; import import java.awt.image.*; java.awt.image.*; import java.io.File; import java.io.File; import import java.io.File; java.io.File; import java.io.FileFilter; import java.io.FileFilter; import import java.io.FileFilter; java.io.FileFilter; java.io.IOException; import import java.io.IOException; import import java.io.IOException; java.io.IOException; javax.imageio.ImageIO; import import javax.imageio.ImageIO; import import javax.imageio.ImageIO; javax.imageio.ImageIO; import javax.swing.*; import javax.swing.*; import import javax.swing.*; javax.swing.*; public public public public class class class class ImageProcessing ImageProcessing ImageProcessing ImageProcessing extends extends extends extends JFrame JFrame {{{{ JFrame JFrame borderLayout1=new BorderLayout(); borderLayout1=new BorderLayout(); borderLayout1=new borderLayout1=new BorderLayout(); BorderLayout(); jmb=new JMenuBar(); jmb=new JMenuBar(); jmb=new jmb=new JMenuBar(); JMenuBar(); file,edit,view,suofang,gray,see,save,move,niuqu; file,edit,view,suofang,gray,see,save,move,niuqu; file,edit,view,suofang,gray,see,save,move,niuqu; file,edit,view,suofang,gray,see,save,move,niuqu; ImageProcessing(String title){ ImageProcessing(String title){ ImageProcessing(String title){ ImageProcessing(String title){ filepath=""; String filepath=""; String filepath=""; filepath=""; String String filename=""; String filename=""; String filename=""; filename=""; String String file2; FileFileFile file2; File file2; file2; BufferedImage buffimg=null; BufferedImage buffimg=null; BufferedImage buffimg=null; BufferedImage buffimg=null; ic;ic;ic;ic; ImageIcon ImageIcon ImageIcon ImageIcon Image ia,l; Image ia,l; ia,l; Image Image ia,l; JLabel jLabel1=null; JLabel jLabel1=null; JLabel JLabel jLabel1=null; jLabel1=null; BorderLayout BorderLayout BorderLayout BorderLayout JMenuBar JMenuBar JMenuBar JMenuBar JMenu JMenu JMenu JMenu public public public public super(title); super(title); super(title); super(title); 6
JMenuItem(" dakai=new JMenuItem("打开");");");"); dakai=new JMenuItem(" dakai=new JMenuItem(" dakai=new JMenu(" file=new JMenu("文件");");");"); file=new JMenu(" file=new JMenu(" file=new JMenuItem JMenuItem JMenuItem JMenuItem dakai.addActionListener(new dakai.addActionListener(new dakai.addActionListener(new dakai.addActionListener(new file.add(dakai); file.add(dakai); file.add(dakai); file.add(dakai); file.addSeparator(); file.addSeparator(); file.addSeparator(); file.addSeparator(); dakai_actionAdapter(this)); dakai_actionAdapter(this)); dakai_actionAdapter(this)); dakai_actionAdapter(this)); JMenuItem(" tuichu=new JMenuItem("退出");");");"); tuichu=new JMenuItem(" tuichu=new JMenuItem(" tuichu=new JMenuItem JMenuItem JMenuItem JMenuItem tuichu.addActionListener(new tuichu.addActionListener(new tuichu.addActionListener(new tuichu.addActionListener(new file.add(tuichu); file.add(tuichu); file.add(tuichu); file.add(tuichu); tuichu_actionAdapter(this)); tuichu_actionAdapter(this)); tuichu_actionAdapter(this)); tuichu_actionAdapter(this)); jmb.add(file); jmb.add(file); jmb.add(file); jmb.add(file); JMenu(" suofang=new JMenu("缩放");");");"); suofang=new JMenu(" suofang=new suofang=new JMenu(" JMenuItem(" JMenuItem suoxiao=new JMenuItem("缩小");");");"); JMenuItem suoxiao=new JMenuItem(" JMenuItem suoxiao=new JMenuItem(" JMenuItem suoxiao=new suoxiao.addActionListener(new suoxiao.addActionListener(new suoxiao.addActionListener(new suoxiao.addActionListener(new testImage_suoxiao_actionAdapter(this)); testImage_suoxiao_actionAdapter(this)); testImage_suoxiao_actionAdapter(this)); testImage_suoxiao_actionAdapter(this)); this.getContentPane().setLayout(borderLayout1); this.getContentPane().setLayout(borderLayout1); this.getContentPane().setLayout(borderLayout1); this.getContentPane().setLayout(borderLayout1); suofang.add(suoxiao); suofang.add(suoxiao); suofang.add(suoxiao); suofang.add(suoxiao); suofang.addSeparator(); suofang.addSeparator(); suofang.addSeparator(); suofang.addSeparator(); JMenuItem JMenuItem JMenuItem JMenuItem fangda.addActionListener(new fangda.addActionListener(new fangda.addActionListener(new fangda.addActionListener(new JMenuItem(" fangda=new JMenuItem("放大");");");"); fangda=new JMenuItem(" fangda=new JMenuItem(" fangda=new testImage_fangda_actionAdapter(this)); testImage_fangda_actionAdapter(this)); testImage_fangda_actionAdapter(this)); testImage_fangda_actionAdapter(this)); suofang.add(fangda); suofang.add(fangda); suofang.add(fangda); suofang.add(fangda); jmb.add(suofang); jmb.add(suofang); jmb.add(suofang); jmb.add(suofang); JMenu(" edit=new JMenu("旋转");");");"); edit=new JMenu(" edit=new JMenu(" edit=new JMenuItem JMenuItem JMenuItem JMenuItem xuanzhuan90.addActionListener(new xuanzhuan90.addActionListener(new xuanzhuan90.addActionListener(new xuanzhuan90.addActionListener(new JMenuItem(" xuanzhuan90=new JMenuItem("旋转 90909090 度");");");"); xuanzhuan90=new JMenuItem(" xuanzhuan90=new JMenuItem(" xuanzhuan90=new xuanzhuan90_actionAdapter(this)); xuanzhuan90_actionAdapter(this)); xuanzhuan90_actionAdapter(this)); xuanzhuan90_actionAdapter(this)); edit.add(xuanzhuan90); edit.add(xuanzhuan90); edit.add(xuanzhuan90); edit.add(xuanzhuan90); edit.addSeparator(); edit.addSeparator(); edit.addSeparator(); edit.addSeparator(); JMenuItem JMenuItem JMenuItem JMenuItem xuanzhuan180.addActionListener(new xuanzhuan180.addActionListener(new xuanzhuan180.addActionListener(new xuanzhuan180.addActionListener(new JMenuItem(" xuanzhuan180=new JMenuItem("旋转 180180180180 度");");");"); xuanzhuan180=new JMenuItem(" xuanzhuan180=new JMenuItem(" xuanzhuan180=new xuanzhuan180_actionAdapter(this)); xuanzhuan180_actionAdapter(this)); xuanzhuan180_actionAdapter(this)); xuanzhuan180_actionAdapter(this)); edit.add(xuanzhuan180); edit.add(xuanzhuan180); edit.add(xuanzhuan180); edit.add(xuanzhuan180); edit.addSeparator(); edit.addSeparator(); edit.addSeparator(); edit.addSeparator(); JMenuItem JMenuItem JMenuItem JMenuItem xuanzhuan270.addActionListener(new xuanzhuan270.addActionListener(new xuanzhuan270.addActionListener(new xuanzhuan270.addActionListener(new JMenuItem(" xuanzhuan270=new JMenuItem("旋转 270270270270 度");");");"); xuanzhuan270=new JMenuItem(" xuanzhuan270=new JMenuItem(" xuanzhuan270=new 7
分享到:
收藏