简单画图程序设计.doc_第1页
简单画图程序设计.doc_第2页
简单画图程序设计.doc_第3页
简单画图程序设计.doc_第4页
简单画图程序设计.doc_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2011年01月16日 星期日设为主页加入收藏帮助|留言交流| 退出 首页 |主题阅读 |tags |精彩目录 |精品文苑 |会员浏览 我的图书馆 休闲怡情|艺术音画美女笑话小游戏壁纸风景 健康养生|健身食疗治病中医减肥经穴亚健康 生活情感|哲理情感家居母婴美食美容百宝箱 文教社会|读书人文历史社会教育职场电脑 简单的画图程序 (转载) jhl666666 收录于2011-01-16 阅读数:查看 收藏数:6公众公开原文来源 tags: java 图像编程 修改 以文找文 推荐给好友 如何对文章标记,添加批注?一共有10个类,其中GBase和HBase分别是图元的基类和操作基类,比较重要的类是GraphicList和PointerHandler,这个是图形操作主要类,DefaultGraphic是矩形,Line是线,目前只做了这么两个图形,对应还有操作类(句柄),DrawPanel是画布,没什么重要的,只是分配了操作图元的句柄而以,好了,废话少说,看代码:DrawPanel.java=package drawing;import java.awt.*;import java.awt.event.*;import javax.swing.JFrame;import drawing.Handler.*;import javax.swing.JPanel;/* Title: * Description: * Copyright: Copyright (c) 2005* Company: * author not attributable* version 1.0*/public class DrawPanel extends JPanel implements MouseListener, MouseMotionListener public GraphicsList graphicsList; public int ActiveTool; public Cursor Cursor; HBase tools = new HBase(int) HandlerType.NumberOfDrawTools; public DrawPanel() graphicsList = new GraphicsList(); tools = new HBase(int) HandlerType.NumberOfDrawTools; tools(int) HandlerType.Pointer = new PointerHandler(); tools(int) HandlerType.DefaultGraphics = new HBase(); toolsHandlerType.Line = new LineHandler(); setDoubleBuffered(true); addMouseListener(this); addMouseMotionListener(this); ActiveTool = HandlerType.Pointer; setBackground(Color.white); /*由mousePressed(),mouseReleased()取得示拖曳的开始与结束坐标*/ public void mousePressed(MouseEvent e) if (e.getButton() = e.BUTTON1) tools(int) ActiveTool.OnMouseDown(this, e); public void mouseReleased(MouseEvent e) if (e.getButton() = e.BUTTON1) tools(int) ActiveTool.OnMouseUp(this, e); public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e) if (e.getClickCount() = 2) if( e.getButton()=e.BUTTON1 ) ActiveTool = HandlerType.DefaultGraphics; else ActiveTool = HandlerType.Line; /*mouseMoved(),mouseDragged()取得鼠标移动的每一个坐标,并调用repaint()方法*/ public void mouseMoved(MouseEvent e) tools(int) ActiveTool.OnMouseMove(this, e); repaint(); public void mouseDragged(MouseEvent e) tools(int) ActiveTool.OnMouseDrag(this, e); repaint(); public void update(Graphics g) g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight(); paint(g); public void paint(Graphics g) g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight(); if (graphicsList != null) graphicsList.Draw(g); DrawNetSelection(g); /* * DrawNetSelection * * param g Graphics */ private void DrawNetSelection(Graphics g) g.setColor(Color.BLACK); if (NetRectangle != null & DrawNetRectangle) g.drawRect(NetRectangle.x, NetRectangle.y, NetRectangle.width, NetRectangle.height); /* * setDrawNetRectangle * * param b boolean */ boolean DrawNetRectangle = false; public void setDrawNetRectangle(boolean b) DrawNetRectangle = b; public boolean IsDrawNetRectangle() return DrawNetRectangle; /* * setNetRectangle * * param rectangle Rectangle */ Rectangle NetRectangle; public void setNetRectangle(Rectangle rectangle) NetRectangle = rectangle; public Rectangle getNetRectangle() return NetRectangle; public static void main(String args) new DrawTool(); =DrawTool.java(显示窗体)=package drawing;import java.awt.Toolkit;import javax.swing.SwingUtilities;import javax.swing.UIManager;import java.awt.Dimension;import javax.swing.JPanel;import java.awt.BorderLayout;import javax.swing.JFrame;import javax.swing.JButton;import java.awt.*;/* Title: * Description: * Copyright: Copyright (c) 2005* Company: * author not attributable* version 1.0*/public class DrawTool extends JFrame JPanel contentPane; BorderLayout borderLayout1 = new BorderLayout(); DrawPanel drawpanel = new DrawPanel(); public DrawTool() try setDefaultCloseOperation(EXIT_ON_CLOSE); jbInit(); catch (Exception exception) exception.printStackTrace(); /* * Component initialization. * * throws java.lang.Exception */ private void jbInit() throws Exception contentPane = (JPanel) getContentPane(); contentPane.setLayout(borderLayout1); setSize(new Dimension(400, 300); setTitle(糊涂仙); show(); contentPane.add(drawpanel, java.awt.BorderLayout.CENTER); =GraphicList.java=package drawing;import java.util.ArrayList;import java.awt.Graphics;import drawing.Graphics.GBase;import java.awt.Point;import java.awt.Rectangle;import drawing.Graphics.DefaultGraphic;/* Title: * Description: * Copyright: Copyright (c) 2005* Company: * author not attributable* version 1.0*/public class GraphicsList ArrayList graphicslist = new ArrayList(); public GraphicsList() public void Draw(Graphics g) for (int i = 0; i graphicslist.size(); i+) GBase o = (GBase) graphicslist.get(i); o.Draw(g); public void Add(GBase o) graphicslist.add(0, o); public void Remove(GBase o) o.OnDelete(); graphicslist.remove(o); if (o instanceof DefaultGraphic) for (int i = 0; i (DefaultGraphic) o).getJoinLines().size(); i+) if (graphicslist.contains(DefaultGraphic) o).getJoinLines(). get(i) graphicslist.remove(DefaultGraphic) o).getJoinLines().get( i); for (int i = 0; i = graphicslist.size() return null; return (GBase) graphicslist.get(index); / / 选中图元的总数/ public int getSelectionCount() int n = 0; for (int i = 0; i graphicslist.size(); i+) GBase o = (GBase) graphicslist.get(i); if (o.IsSelected() n+; return n; / / 获取选中的图元/ / / public GBase GetSelectedObject(int index) int n = -1; for (int i = 0; i graphicslist.size(); i+) GBase o = (GBase) graphicslist.get(i); if (o.IsSelected() n+; if (n = index) return o; return null; / / 选中矩形范围内的所有图元/ / public void SelectInRectangle(Rectangle rectangle) UnselectAll(); for (int i = 0; i graphicslist.size(); i+) GBase o = (GBase) graphicslist.get(i); if (o.IntersectsWith(rectangle) o.setSelected(true); / / 取消选中所有图元/ public void UnselectAll() for (int i = 0; i graphicslist.size(); i+) GBase o = (GBase) graphicslist.get(i); if (o.IsSelected() o.setSelected(false); / / 选中所有图元/ public void SelectAll() for (int i = 0; i graphicslist.size(); i+) GBase o = (GBase) graphicslist.get(i); if (o.IsSelected() o.setSelected(true); / / 删除选中的图元/ / public boolean DeleteSelection() boolean result = false; int n = graphicslist.size(); for (int i = n - 1; i = 0; i-) if (GBase) graphicslist.get(i).IsSelected() Object oe = graphicslist.get(i); if (graphicslist.contains(oe) (GBase) oe).OnDelete(); graphicslist.remove(oe); if (oe instanceof DefaultGraphic) for (int j = 0; j (DefaultGraphic) oe).getJoinLines().size(); j+) if (graphicslist.contains(DefaultGraphic) oe). getJoinLines(). get(j) graphicslist.remove(DefaultGraphic) oe). getJoinLines().get( j); for (int j = 0; j (DefaultGraphic) oe).getSplitLines().size(); j+) if (graphicslist.contains(DefaultGraphic) oe). getSplitLines(). get(j) graphicslist.remove(DefaultGraphic) oe). getSplitLines().get( j); result = true; return result; / / 将选中图元置前/ / public boolean MoveSelectionToFront() int n; int i; ArrayList tempList; tempList = new ArrayList(); n = graphicslist.size(); for (i = n - 1; i = 0; i-) if (GBase) graphicslist.get(i).IsSelected() tempList.add(graphicslist.get(i); graphicslist.remove(i); n = tempList.size(); for (i = 0; i 0); / / 将选中图元置后/ / public boolean MoveSelectionToBack() int n; int i; ArrayList tempList; tempList = new ArrayList(); n = graphicslist.size(); for (i = n - 1; i = 0; i-) if (GBase) graphicslist.get(i).IsSelected() tempList.add(graphicslist.get(i); graphicslist.remove(i); n = tempList.size(); for (i = n - 1; i = 0; i-) graphicslist.add(tempList.get(i); return (n 0); / / 获得某一点的图元/ / / / public GBase GetAt(int x, int y) for (int i = 0; i = 0) return (GBase) get(i); return null; =GBase.java=package drawing.Graphics;import java.awt.*;import java.util.ArrayList; /* * Title: * * Description: * * Copyright: Copyright (c) 2005 * * Company: * * author not attributable * version 1.0 */ public abstract class GBase public void Draw(Graphics g) public void DrawTracker(Graphics g) if (!IsSelected() return; for (int i = 1; i = getHandleCount(); i+) g.setColor(Color.BLACK); g.fillRect(GetHandleRectangle(i).x,GetHandleRectangle(i).y,GetHandleRectangle(i).width,GetHandleRectangle(i).height); public Point GetHandle(int handleNumber) return null; public Cursor GetHandleCursor(int handleNumber) return null; public Rectangle GetHandleRectangle(int handleNumber) Point point = GetHandle(handleNumber); return new Rectangle(point.x - 3, point.y - 3, 7, 7); public int getHandleCount() return 0; public void HintShow(Graphics g) public int HitTest(Point point) return 0; public boolean IntersectsWith(Rectangle rectangle) return false; public Point getmaxPoint() return null; public void Move(int deltaX, int deltaY) public void MoveHandleTo(Point point, int handleNumber) public void Normalize() public void OnDelete() boolean selected=false; public boolean IsSelected() return selected; public void setSelected(boolean Selected) selected=Selected; public Point GetMiddlePoint() return null; public Point GetPointOfIntersection(Point point) return null; / / 获得正常的矩形(给出点时,可能会给出一个反向的,此时矩形的起始点并非最小点,此时要进行计算找到最小点,以最小点为坐标绘制矩形) / / / / / / public static Rectangle GetNormalizedRectangle(int x1, int y1, int x2, int y2) if (x2 x1) int tmp = x2; x2 = x1; x1 = tmp; if (y2 y1) int tmp = y2; y2 = y1; y1 = tmp; return new Rectangle(x1, y1, x2 - x1, y2 - y1); / / 获取正常的矩形 / / / / public static Rectangle GetNormalizedRectangle(Point p1, Point p2) return DefaultGraphic.GetNormalizedRectangle(p1.x, p1.y, p2.x, p2.y); / / 获取正常的矩形 / / / public static Rectangle GetNormalizedRectangle(Rectangle r) return DefaultGraphic.GetNormalizedRectangle(r.x, r.y, r.x + r.width, r.y + r.height); public static Point GetPointOfIntersection(Rectangle rect, Point pos) Point posCenter = new Point(rect.x+ rect.width / 2, rect.y + rect.height / 2); Point posResult = new Point(); if (pos.y= rect.y + rect.height) & (pos.x = rect.x) & (pos.x posCenter.y) return new Point(pos.x, rect.y + rect.height); else return new Point(pos.x, rect.y); if (pos.y=posCenter.y) if (pos.x posCenter.x) return new Point(rect.x, posCenter.y); else return new Point(rect.x + rect.width, posCenter.y); /bottom and top /bottom a = pos.y - posCenter.y; b = posCenter.x - pos.x; c = rect.height; d = rect.width; c = c / d; a = a / b; if (pos.x = c & pos.y rect.y + rect.height) posResult.y = rect.y + rect.height; posResult.x = posCenter.x - rect.height / 2 * (posCenter.x - pos.x) / (pos.y - posCenter.y); return posResult; /right a = pos.y - posCenter.y; b = pos.x - posCenter.x; c = rect.height; d = rect.width; a = a / b; c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论