基于JAVA的 图像处理软件.docx
- 文档编号:5611473
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:34
- 大小:589.98KB
基于JAVA的 图像处理软件.docx
《基于JAVA的 图像处理软件.docx》由会员分享,可在线阅读,更多相关《基于JAVA的 图像处理软件.docx(34页珍藏版)》请在冰豆网上搜索。
基于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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于JAVA的 图像处理软件 基于 JAVA 图像 处理软件