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

上传人:b****5 文档编号:5611473 上传时间:2022-12-29 格式:DOCX 页数:34 大小:589.98KB
下载 相关 举报
基于JAVA的 图像处理软件.docx_第1页
第1页 / 共34页
基于JAVA的 图像处理软件.docx_第2页
第2页 / 共34页
基于JAVA的 图像处理软件.docx_第3页
第3页 / 共34页
基于JAVA的 图像处理软件.docx_第4页
第4页 / 共34页
基于JAVA的 图像处理软件.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

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

《基于JAVA的 图像处理软件.docx》由会员分享,可在线阅读,更多相关《基于JAVA的 图像处理软件.docx(34页珍藏版)》请在冰豆网上搜索。

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

基于JAVA的图像处理软件

成绩:

 

JAVA编程B实验报告

 

实验七:

基于JAVA的图像处理软件

 

 

实验时间:

2012年6月10日星期日

JAVA编程B实验报告

一、实验名称

Java编程B综合性实验

二、实验目的

1、掌握J2SE应用程序的设计。

2、掌握抽象窗口工具包AWT的使用。

3、掌握应用程序用户界面的开发工具包SWING的使用

三、实验平台

操作系统:

Windows7

JDK:

JDK1.7

IDE:

Eclipse3.5

四、结构框图

 

 

五、实验内容

1、抽象窗口工具包(AbstractWindowToolkit,AWT)简介

功能:

包含用于创建用户界面和绘制图形图像的所有类。

描述:

包含用于创建用户界面和绘制图形图像的所有类。

在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包

importjavax.swing.*;

大部分Swing程序用到了AWT的基础底层结构和事件模型,因此需要导入两个包:

importjava.awt.*;

importjava.awt.event.*;

如果图形界面中包括了事件处理,那么还需要导入事件处理包:

importjavax.swing.event.*;

选择界面风格

Swing允许选择程序的图形界面风格常用的有java风格,windows风格等。

下面的代码用于选择图形界面风格,这里选择的是跨平台的Java界面风格。

try{UIManager.setLookAndFeel(

UIManager.getCrossPlatformLookAndFeelClassName());}

catch(Exceptione){}

设置顶层容器

图形界面至少要有一个顶级Swing容器,顶级Swing容器为其它Swing组件在屏幕上的绘制和处理事件提供支持。

常用的顶级容器:

JFrame(框架):

表示主程序窗口

JDialog(对话框):

每个JDialog对象表示一个对话框,对话框属于二级窗口

JApplet(小程序):

在浏览器内显示一个小程序界面

一个框架包括边界、菜单栏、工具栏、状态栏,以及中间占主要部分的窗格。

窗格也可以看作是一种面板,但它是框架的一个组成部分;组件不会直接放到框架上,而是放在若干个面板上,这些面板再放到窗格上。

用框架对象的getContentPane()函数来获得窗格,再调用窗格的add()函数放置面板。

publicstaticvoidmain(String[]args){JFrameframe=newJFrame("SwingApplication");

JPanelpanel1=newJPanel();

frame.getContentPane().add(panel1,BorderLayout.CENTER);

......//

添加其他组件

frame.pack();frame.setVisible(true);}

模式使用

关键是java.awt.*里面的两个与显示设备有关的类:

GraphicsEnvironment和GraphicsDevice。

GraphicsEnvironment为Java应用程序提供了特定平台的GraphicsDevice对象和Font对象集合。

这些GraphicsDevice可以是各种本机和远端机器的资源,如屏幕、打印机或者是ImageBuffer,甚至是Graphics2D绘图方法的目标对象。

而GraphicsDevice就是指特定的图形环境了,如屏幕和打印设备等。

这样,我们就可以用GraphicsDevice来操纵屏幕了。

GraphicsDevice提供的setFullScreenWindow()方法就是设置全屏幕用的。

事件处理

监听器:

ActionListener

方法:

actionPerformed

事件:

ActionEvent

●StringgetActionCommand()

actioncommand是控件内部的一个字符串,用于标识控件的状态。

此函数可以取得控件的状态,从而决定到底该做什么。

●intgetModifiers()

取得“产生此事件时,用户同时按下的组合键”

●longgetWhen()

取得“产生此事件时的时间戳”

事件产生原因:

点击按钮,在列表框中选择内容,在文本框中点回车,计时器到期

监听器:

AdjustmentListener

方法:

adjustmentValueChanged

事件:

AdjustmentEvent

●AdjustablegetAdjustable()

adjustable是一个接口,各种滚动条都实现了这个接口。

●intgetAdjustmentType()

取得滚动类型,共有UNIT_INCREMENT,UNIT_DECREMENT,BLOCK_INCREMENT,BLOCK_DECREMENT,TRACK共5种类型

●intgetValue()

取得滚动滑块的当前值

事件产生原因:

滚动条的滚动

监听器:

ItemListener

方法:

itemStateChanged

事件:

ItemEvent

●ObjedtgetItem()

取得被选中的元素。

注意,返回值是Object,还应该进行强制类型转换。

●ItemSelectablegetItemSelectable()

ItemSelectable是一个接口,代表那些包含了n个可供选择的子元素的对象。

此方法返回产生此事件的对象。

此方法的作用主要在于,如果一个列表框是允许多选的,那么上面的方法就不好用了,应该用此方法得到列表对象,再取得被选中的多个元素。

●intgetStateChange()

取得选择的状态,是SELECTED还是DESELECTED

事件产生原因:

各种按钮的点击,列表框的选择

监听器:

FocusListener

方法:

focusGained、focusLost

事件:

FocusEvent

●ComponentgetOppositeComponent()

得到“参与焦点变换的”另一个对象。

如果是焦点取得事件,则返回之前拥有焦点的对象;如果是焦点失去事件,则返回得到焦点的对象。

若焦点转移到另外一个应用程序,返回null

●booleanisTemporary()

焦点是临时性转移还是永久转移。

临时性转移:

用鼠标拖动窗口或者窗口变为非激活状态。

其他为永久性转移。

事件产生原因:

各种组件的焦点变化

监听器:

KeyListener

方法:

keyPressed、keyReleased、keyTyped

事件:

KeyEvent

●chargetKeyChar()

此方法只在keytyped中有效,返回按下的字符。

比如按下shift+a,返回'A'

●intgetKeyCode()

取得键盘上按键的整数编码。

请注意,是键盘上的按键,比如F1,Ctrl,Home键等等,都有相应编码。

不支持组合键,也就是说“Shift+a”和“a”返回同样的内容,都是小写a的ASCII码。

但是大键盘的数字键和小键盘的数字键返回内容不同。

●staticStringgetKeyModifiersText(intmodifiers)

将掩码转化为字符串,比如“Ctrl”,“Ctrl+Shift”等。

注意它是static方法

●staticStringgetKeyText(intkeyCode)

返回keyCode代表的按钮的名字,比如"Home","F1"等。

注意它是statci方法

事件产生原因:

在各种组件上敲击键盘

监听器:

MouseListener

方法:

mouseClicked、mousePressed、mouseReleased

mouseEntered、mouseExited

事件:

MouseEvent

●PointgetLocationOnScreen()

返回鼠标相对于显示屏幕的绝对坐标(Java1.6版提供)

●intgetXOnScreen()

返回鼠标相对于显示屏幕的X的绝对坐标(java1.6版提供)

●intgetYOnScreen()

返回鼠标相对于显示屏幕的Y的绝对坐标(java1.6版提供)

●PointgetPoint()

返回鼠标相对于组件的绝对坐标

●intgetX()

返回鼠标相对于组件的X的绝对坐标

●intgetY()

返回鼠标相对于组件的Y的绝对坐标

●voidtranslatePoint(intx,inty)

给鼠标的做用点加上一个偏移量。

比如2个参数分别是10,20,你要用鼠标画直线,当你鼠标指向100,100开始画,实际上的线是画在110,120处

●intgetClickCount()

产生此事件时鼠标共点击了多少下(单击、双击、三击……)

●intgetButton()

产生此事件时,鼠标的哪个键被点击了:

NOBUTTON,BUTTON1,BUTTON2或者BUTTON3

●booleanisPopupTrigger()

是否能够触发一个弹出式菜单。

由于各平台触发弹出式菜单的情况不一样,因此应该在mousePressed和mouseReleased中都检测一下

事件产生原因:

在任何组件上点击鼠标、将光标移动进来或出去

监听器:

MouseMotionListener

方法:

mouseDragged、mouseMoved

事件:

MouseEvent

事件产生原因:

在任何组件上移动鼠标

监听器:

MouseWheelListener

方法:

mouseWheelMoved

事件:

MouseWheelEvent

●intgetScrollType()

滚动的类型,是按块滚动WHEEL_BLOCK_SCROLL还是按单位滚动WHEEL_UNIT_SCROLL

●intgetScrollAmount()

返回为相应此事件应该滚动的单位数。

此方法有效的前提是按单位滚动。

●intgetWheelRotation()

鼠标滚轮滚动过程中”咔嚓“声的数目。

向上滚为负值,向下滚为正值

事件产生原因:

在任何组件上滚动鼠标中键

监听器:

WindowListener

方法:

windowOpened、windowClosing、windowClosed、windowIconified

windowDeiconified、windowActivated、windowDeactivated

事件:

WindowEvent

●WindowgetWindow()

返回发生此事件的window对象

●WindowgetOppositeWindow()

若发生了焦点转移,返回另一个参与此事件的window对象,或者null

●intgetOldState()

窗口变化前的状态:

NORMAL、ICONIFIED、MAXIMIZED_BOTH

●intgetNewState()

窗口变化后的状态

事件产生原因:

窗口发生变化

监听器:

WindowFocusListener

方法:

windowGainedFocus、windowLostFocus

事件:

WindowEvent

事件产生原因:

窗口得到或失去焦点

监听器:

WindowstateListener

方法:

WindowstateChanged

事件:

WindowEvent

事件产生原因:

窗口状态改变

 

四、代码分析

packageimust.imageprocessing;

importjava.awt.*;

importjava.awt.event.*;

importjava.awt.image.*;

importjava.io.File;

importjava.io.FileFilter;

importjava.io.IOException;

importjavax.imageio.ImageIO;

importjavax.swing.*;

publicclassImageProcessingextendsJFrame{

Stringfilepath="";

Stringfilename="";

Filefile2;

BufferedImagebuffimg=null;

ImageIconic;

Imageia,l;

JLabeljLabel1=null;

BorderLayoutborderLayout1=newBorderLayout();

JMenuBarjmb=newJMenuBar();

JMenufile,edit,view,suofang,gray,see,save,move,niuqu;

publicImageProcessing(Stringtitle){

super(title);

file=newJMenu("文件");

JMenuItemdakai=newJMenuItem("打开");

dakai.addActionListener(newdakai_actionAdapter(this));

file.add(dakai);

file.addSeparator();

JMenuItemtuichu=newJMenuItem("退出");

tuichu.addActionListener(newtuichu_actionAdapter(this));

file.add(tuichu);

jmb.add(file);

suofang=newJMenu("缩放");

JMenuItemsuoxiao=newJMenuItem("缩小");

suoxiao.addActionListener(newtestImage_suoxiao_actionAdapter(this));

this.getContentPane().setLayout(borderLayout1);

suofang.add(suoxiao);

suofang.addSeparator();

JMenuItemfangda=newJMenuItem("放大");

fangda.addActionListener(newtestImage_fangda_actionAdapter(this));

suofang.add(fangda);

jmb.add(suofang);

edit=newJMenu("旋转");

JMenuItemxuanzhuan90=newJMenuItem("旋转90度");

xuanzhuan90.addActionListener(newxuanzhuan90_actionAdapter(this));

edit.add(xuanzhuan90);

edit.addSeparator();

JMenuItemxuanzhuan180=newJMenuItem("旋转180度");

xuanzhuan180.addActionListener(newxuanzhuan180_actionAdapter(this));

edit.add(xuanzhuan180);

edit.addSeparator();

JMenuItemxuanzhuan270=newJMenuItem("旋转270度");

xuanzhuan270.addActionListener(newxuanzhuan270_actionAdapter(this));

edit.add(xuanzhuan270);

jmb.add(edit);

gray=newJMenu("图像灰度处理");

JMenuItemhuidu=newJMenuItem("灰度变换");

huidu.addActionListener(newhuidu_actionAdapter(this));

gray.add(huidu);

gray.addSeparator();

JMenuItemjunhenghua=newJMenuItem("直方图均衡化");

junhenghua.addActionListener(newjunhenghua_actionAdapter(this));

gray.add(junhenghua);

jmb.add(gray);

//////////////////zyf/////////////////////////////

see=newJMenu("变形");

JMenuItemlashen=newJMenuItem("拉伸");

lashen.addActionListener(newtestImage_lashen_actionAdapter(this));

see.add(lashen);

see.addSeparator();

JMenuItemzhankuan=newJMenuItem("展宽");

zhankuan.addActionListener(newtestImage_zhankuan_actionAdapter(this));

see.add(zhankuan);

see.addSeparator();

jmb.add(see);

niuqu=newJMenu("扭曲");

JMenuItemniuqu1=newJMenuItem("扭曲");

niuqu1.addActionListener(newtestImage_niuqu1_actionAdapter(this));

niuqu.add(niuqu1);

niuqu.addSeparator();

jmb.add(niuqu);

save=newJMenu("保存");

JMenuItemsaveas=newJMenuItem("另存为");

saveas.addActionListener(newsaveas_actionAdapter(this));

save.add(saveas);

save.addSeparator();

jmb.add(save);

move=newJMenu("移动");

JMenuItemlmove=newJMenuItem("向左移动");

lmove.addActionListener(newtestImage_lmove_actionAdapter(this));

move.add(lmove);

move.addSeparator();

JMenuItemrmove=newJMenuItem("向右移动");

rmove.addActionListener(newsaveas_actionAdapter(this));

move.add(rmove);

move.addSeparator();

jmb.add(move);

//////////////////zyf/////////////////////////////

view=newJMenu("关于");

JMenuItembanben=newJMenuItem("版本说明");

banben.addActionListener(newbanben_actionAdapter(this));

view.add(banben);

jmb.add(view);

//zyf

this.setSize(800,600);

this.setJMenuBar(jmb);

jLabel1=newJLabel("",JLabel.CENTER);

JScrollPanepane=newJScrollPane(jLabel1);

this.add(pane,borderLayout1.CENTER);

this.setVisible(true);

}

publicstaticvoidmain(String[]args){

ImageProcessingtestImage1=newImageProcessing("基于J2SE的数字图像处理软件");

testImage1.addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

System.exit(0);

}

});

}

//////////////////通过文件选择对话框打开图片并显示\\\\\\\\\

voiddakai_actionPerformed(ActionEvente){

JFileChooserchooser=newJFileChooser();

if(JFileChooser.APPROVE_OPTION==chooser.showOpenDialog(this))

{

S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 实习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1