ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:470.58KB ,
资源ID:6834443      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6834443.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验7实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验7实验报告.docx

1、实验7实验报告计算机图形学实验7实验报告 实验题目:复杂Java绘图板程序实验内容:1 阅读理解本试验提供的参考资料。2编写并调通一个复杂绘图板的java程序。参考资料:1 MiniDrawPad.java 2 Java图形处理介绍.doc基本概念:直接颜色模型(DirectColorModel):直接颜色模型在程序中指定整型数中的多少位和哪些位分别用于表示alpaha、红、绿、蓝四个属性。索引颜色模型:索引颜色模型把颜色值看成红、绿、蓝数值查找表中的索引,在Java中索引是个字节。实际要查找3个表,各对应一个主颜色(另外,你还可以用第4个表查找ALPHA)。每个表项包含8位,用于指定颜色强度

2、。图形观察者(ImageObserver):图形观察者机制是Observer设计模式的一个例子。其思路是让任意个其它对象“观察”一个对象。被观察对象产生观察者要知道的改变时,被观察对象调用所有观察者。被观察对象可以决定何时通知观察者。媒介跟踪器(MediaTracker):媒介跟踪器MediaTracker在处理动画播放程序或多幅图象时有广泛的应用。为达到图象平滑的效果,通常小程序和应用程序要在某个图形完全装入后才能工作。内存图形源(MemoryImageSource):在Java中另一种图形源是内存:可以在程序中建立整形或字节数组来表示图素值,并利用Java的MemoryImageSourc

3、e类构造Image的实例。过滤器(ImageFilter):AWT通过允许你在图象生成者和图象使用者之间插入图象过滤器的方式支持对图象的操作。一个图象过滤器实际上就是一个ImageFilter类,它放置在一个生产者和一个使用者之间,在使用者得到图象之前改变图象的数据。客户程序:客户程序由三个类组成:client类,network类和writer类。Client类是其主体部分,此类由Frame类扩展而来,Writer类是在network类中启动的线程。算法设计:1.主窗体的设计。主类(MiniDrawPad)用来生成主界面,完成画图板的 主要框架。主类由JFrame派生出来。主界面由菜单栏、工具

4、栏和画图区域三部分组成,布局格式采用BorderLayout布局形式。2.单栏和工具栏的设计。菜单栏包括文件菜单栏、颜色菜单栏、线条粗 细菜单栏和提示菜单栏。其中文件菜单栏包括文件的新建、打开、保存等选项;颜色菜单栏可以进行颜色选择;线条粗细菜单栏设置线条的粗细;帮助菜单栏给出提示信息。工具栏由新建、打开和保存文件按钮、基本图形的按钮、选择字体风格复选框和字体下拉列表框组成。在主类中添加并对菜单栏和工具栏添加事件监听。3.事件响应的处理。对菜单栏、工具栏和用鼠标画图的事件响应进行处理。 菜单栏中文件的新建、打开和保存菜单事件的处理:Java把每个文 件都视作顺序字节流。如果要在Java中进行文

5、件处理,则必须用到Java.io包。这个包定义了一些流类,选用FileInputStream(从文件中读入数据)和FIleOutputStream(向文件输出数据),通过建立这些文件的对象便可以打开文件。这些流相应地从InputStream和OutputStream派生,这些文件均使用文件流,所以必须将文件结构化以适应程序的要求。我们需要对保存的对象序列化,然后以输出流的方式保存。在程序中用newFile()、loadFile()和saveFile()三个函数分别实现文件的新建、打开和保存。 工具栏事件的处理:主要有一些Button组成。我们用ButtonHandler 内部类处理基本单元事件

6、,ButtonHandler1内部类处理新建、打开和保存文件按钮,在画图类DrawPanel中定义CreateNewItem()函数处理工具栏中的画图事件。 鼠标画图:由于画图板主要是用来画图,所以需要在程序中添加对 鼠标按下、拖动、进入、退出、移动和单机事件进行监听并进行处理。内部类mouseA定义了完成鼠标按下、松开、进入、退出事件响应。内部类mouseB完成鼠标拖动和移动事件响应。4.画图的基本功能。在程序设计中用到了动态绑定,我们可以提取他们的 公共属性,先建立一个父类,然后建立各个子类,继承父类中的方法并将父类中的draw函数重写。一些关于图形形状的类,最主要是用于画图、字体和橡皮擦

7、等基本类型。/主函数段 public static void main(String args) try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch (Exception e) /将界面设置为当前windows风格 MiniDrawPad newPad = new MiniDrawPad(); newPad.addWindowListener( new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0

8、); ); /创建各种基本图形的按钮 drawingArea = new DrawPanel(); choices = new JButtonnames.length; buttonPanel = new JToolBar(JToolBar.VERTICAL); buttonPanel = new JToolBar(JToolBar.HORIZONTAL); ButtonHandler handler = new ButtonHandler(); ButtonHandler1 handler1 = new ButtonHandler1(); buttonPanel.setBackground(

9、new Color(0,255,0); /导入图形图标,图标存放在项目文件夹下的Icons目录内 for (int i = 0; i choices.length; i+) itemsi = new ImageIcon(Icons/+namesi + .gif); choicesi = new JButton(itemsi); choicesi.setToolTipText(tipTexti); choicesi.setPreferredSize(new Dimension(33, 33); choicesi.setBackground(new Color(0,255,0); buttonPa

10、nel.add(choicesi); /画图面板类,用来画图 class DrawPanel extends JPanel public DrawPanel() setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR); setBackground(Color.white); addMouseListener(new mouseA(); addMouseMotionListener(new mouseB(); Override public void paintComponent(Graphics g) super.paintC

11、omponent(g); Graphics2D g2d = (Graphics2D) g; /定义画笔 int j = 0; while (j = index) draw(g2d, itemListj); j+; void draw(Graphics2D g2d, drawings i) i.draw(g2d);/将画笔传入到各个子类中,用来完成各自的绘图 代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; Import java.io.*public class MiniDrawPad extends J

12、Frame /主类,扩展了JFrame类,用来生成主界面 private ObjectInputStream input; private ObjectOutputStream output; /定义输入输出流,用来调用和保存图像文件 private JLabel statusBar; /显示鼠标状态的提示条 private DrawPanel drawingArea; /画图区域 private int width = 850, height = 600; /定义画图区域初始大小 drawings itemList = new drawings5000; /用来存放基本图形的数组 priva

13、te JButton choices; /按钮数组,存放以下名称的功能按钮 JToolBar buttonPanel; /定义按钮面板 private int currentChoice = 3; /设置默认画图状态为随笔画 int index = 0; /当前已经绘制的图形数目 private Color color = Color.black; /当前画笔颜色 int R, G, B; /用来存放当前色彩值 int f1, f2; /用来存放当前字体风格 String style1; /用来存放当前字体 private float stroke = 1.0f; /设置画笔粗细,默认值为1.

14、0f JCheckBox bold, italic; /定义字体风格选择框 JComboBox styles; private String names = New, Open, Save, Pencil, Line, Rect, fRect, Oval, fOval, Circle, fCircle, RoundRect, frRect, Rubber, Color, Stroke, Word ; private String styleNames = 宋体,隶书,华文彩云,仿宋,华文行楷, 方正舒体,Times New Roman,Serif,Monospaced, SonsSerif,G

15、aramond ; private Icon items; private String tipText = 新建, 打开, 保存, 铅笔画, 直线, 空心矩形, 填充矩形, 空心椭圆, 填充椭圆, 空心圆形, 填充圆形, 空心圆角矩形, 填充圆角矩形, 橡皮擦, 颜色, 线条, 输入文本 ; public MiniDrawPad() /构造函数 super(绘图板 姓名:郄利飞 学号:201101010303); JMenuBar bar = new JMenuBar(); JMenu fileMenu = new JMenu(文件(F)); fileMenu.setMnemonic(F);

16、/新建文件菜单项 JMenuItem newItem = new JMenuItem(新建-N); newItem.setMnemonic(N); newItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_N, InputEvent.CTRL_MASK); newItem.addActionListener( new ActionListener() public void actionPerformed(ActionEvent e) newFile(); /如果被触发,则调用新建文件函数段 ); fileMenu.add(newI

17、tem);/保存文件菜单项 JMenuItem saveItem = new JMenuItem(保存-S); saveItem.setMnemonic(S); saveItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_S, InputEvent.CTRL_MASK); saveItem.addActionListener( new ActionListener() public void actionPerformed(ActionEvent e) saveFile(); /如果被触发,则调用保存文件函数段 ); fileMen

18、u.add(saveItem);/打开文件菜单项 JMenuItem openItem = new JMenuItem(打开-L); openItem.setMnemonic(L); openItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_L, InputEvent.CTRL_MASK); openItem.addActionListener( new ActionListener() public void actionPerformed(ActionEvent e) openFile(); /如果被触发,则调用打开文件函数段

19、 ); fileMenu.add(openItem); fileMenu.addSeparator();/退出菜单项 JMenuItem exitItem = new JMenuItem(退出-X); exitItem.setMnemonic(X); exitItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_X, InputEvent.CTRL_MASK); exitItem.addActionListener( new ActionListener() public void actionPerformed(ActionEven

20、t e) System.exit(0); /如果被触发,则退出画图板程序 ); fileMenu.add(exitItem); bar.add(fileMenu); JMenu setMenu = new JMenu(设置(E); setMenu.setMnemonic(E); JMenuItem colorItem = new JMenuItem(颜色-O); colorItem.setMnemonic(O); colorItem.addActionListener( new ActionListener() public void actionPerformed(ActionEvent e

21、) chooseColor(); /如果被触发,则调用选择颜色函数段 ); setMenu.add(colorItem); bar.add(setMenu); JMenuItem strokeItem = new JMenuItem(线条-K); strokeItem.setMnemonic(K); strokeItem.addActionListener( new ActionListener() public void actionPerformed(ActionEvent e) setStroke(); ); setMenu.add(strokeItem); bar.add(setMen

22、u); JMenu helpMenu = new JMenu(帮助(H); helpMenu.setMnemonic(H); JMenuItem aboutItem = new JMenuItem(请联系我 ); aboutItem.setMnemonic(A); aboutItem.addActionListener( new ActionListener() public void actionPerformed(ActionEvent e) JOptionPane.showMessageDialog(null, 西安石油大学 信息与计算科学 n郄利飞n nn , 帮助, JOptionP

23、ane.INFORMATION_MESSAGE); ); helpMenu.add(aboutItem); bar.add(helpMenu); items = new ImageIconnames.length;/创建各种基本图形的按钮 drawingArea = new DrawPanel(); choices = new JButtonnames.length; buttonPanel = new JToolBar(JToolBar.VERTICAL); buttonPanel = new JToolBar(JToolBar.HORIZONTAL); ButtonHandler hand

24、ler = new ButtonHandler(); ButtonHandler1 handler1 = new ButtonHandler1(); for (int i = 0; i choices.length; i+) itemsi = new ImageIcon(namesi + .gif); choicesi = new JButton(, itemsi); choicesi.setToolTipText(tipTexti); choicesi.setPreferredSize(new Dimension(33, 33); buttonPanel.add(choicesi); /将动

25、作侦听器加入按钮里面 for (int i = 3; i choices.length - 3; i+) choicesi.addActionListener(handler); choices0.addActionListener( new ActionListener() public void actionPerformed(ActionEvent e) newFile(); ); choices1.addActionListener( new ActionListener() public void actionPerformed(ActionEvent e) openFile();

26、); choices2.addActionListener( new ActionListener() public void actionPerformed(ActionEvent e) saveFile(); ); choiceschoices.length - 3.addActionListener(handler1); choiceschoices.length - 2.addActionListener(handler1); choiceschoices.length - 1.addActionListener(handler1);/字体风格选择 styles = new JComb

27、oBox(styleNames); styles.setMaximumRowCount(8); styles.addItemListener( new ItemListener() public void itemStateChanged(ItemEvent e) style1 = styleNamesstyles.getSelectedIndex(); );/字体选择 bold = new JCheckBox(粗体); italic = new JCheckBox(斜体); checkBoxHandler cHandler = new checkBoxHandler(); bold.addI

28、temListener(cHandler); italic.addItemListener(cHandler); JPanel wordPanel = new JPanel(); buttonPanel.add(bold); buttonPanel.add(italic); buttonPanel.add(styles); styles.setMinimumSize(new Dimension(50, 20); styles.setMaximumSize(new Dimension(100, 20); Container c = getContentPane(); super.setJMenu

29、Bar(bar); c.add(buttonPanel, BorderLayout.NORTH); c.add(drawingArea, BorderLayout.CENTER); statusBar = new JLabel(); c.add(statusBar, BorderLayout.SOUTH); statusBar.setText( 欢迎进入我的绘图板界面! :); createNewItem(); setSize(width, height); show(); /按钮侦听器ButtonHanler类,内部类,用来侦听基本按钮的操作 public class ButtonHandler implements ActionListener public void actionPerformed(ActionEvent e) for (int j = 3; j choices.leng

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

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