成绩:JAVA编程B实验报告实验七:基于JAVA的图像处理软件实验时间:2012年6月10日星期日1JAVA编程B实验报告一、实验名称Java编程B综合性实验二、实验目的1、掌握J2SE应用程序的设计。2、掌握抽象窗口工具包AWT的使用。3、掌握应用程序用户界面的开发工具包SWING的使用三、实验平台操作系统:Windows7JDK:JDK1.7IDE:Eclipse3.5四、结构框图打开程序打开文件2五、实验内容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包缩放缩小放大旋转90度180270图像灰度处理灰度直方变形扭曲拉伸展宽扭曲3importjavax.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()方法就是设置全屏幕用的。事件处理监听器:ActionListener4方法: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()焦点是临时性转移还是永久转移。临时性转移:用鼠标拖动窗口或者窗口变5为非激活状态。其他为永久性转移。事件产生原因:各种组件的焦点变化监听器: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、mouseReleasedmouseEntered、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()6是否能够触发一个弹出式菜单。由于各平台触发弹出式菜单的情况不一样,因此应该在mousePressed和mouseReleased中都检测一下事件产生原因:在任何组件上点击鼠标、将光标移动进来或出去监听器:MouseMotionListener方法:mouseDragged、mouseMoved事件:MouseEvent事件产生原因:在任何组件上移动鼠标监听器:MouseWheelListener方法:mouseWheelMoved事件:MouseWheelEvent●intgetScrollType()滚动的类型,是按块滚动WHEEL_BLOCK_SCROLL还是按单位滚动WHEEL_UNIT_SCROLL●intgetScrollAmount()返回为相应此事件应该滚动的单位数。此方法有效的前提是按单位滚动。●intgetWheelRotation()鼠标滚轮滚动过程中”咔嚓“声的数目。向上滚为负值,向下滚为正值事件产生原因:在任何组件上滚动鼠标中键监听器:WindowListener方法:windowOpened、windowClosing、windowClosed、windowIconifiedwindowDeiconified、windowActivated、windowDeactivated事件:WindowEvent●WindowgetWindow()返回发生此事件的window对象●WindowgetOppositeWindow()若发生了焦点转移,返回另一个参与此事件的window对象,或者null●intgetOldState()窗口变化前的状态:NORMAL、ICONIFIED、MAXIMIZED_BOTH●intgetNewState()窗口变化后的状态事件产生原因:窗口发生变化监听器:WindowFocusListener方法:windowGainedFocus、windowLostFocus事件:WindowEvent事件产生原因:窗口得到或失去焦点监听器:WindowstateListener方法:WindowstateChanged事件:WindowEvent事件产生原因:窗口状态改变