当前位置:文档之家› 制作一个图形编辑系统

制作一个图形编辑系统

目录一、题目内容及要求 (5)二、设计思路 (5)三、具体实现 (8)四、运行调试和分析讨论 (15)五、设计体会和小结 (17)六、致谢 (18)七、参考文献 (18)一、题目内容及要求制作一个友好的图形用户界面,操作简单易行的图形编辑系统,其具体要求如下:(1)能用拖橡皮筋的手法绘制各类图形(直线、椭圆、矩形、文字)(2)支持画笔颜色、文字大小设置;(3)能将画面中的所有图形存储到文件中;(4)能从文件读取图形进行增补;(5)采用对话框获取图形文件名。

(6)也可以思考一先如何利用鼠标选取图形,删除二、设计思路1、功能规划将主界面设置为当前Windows风格的,然后在一个Container里设置菜单区域,常用功能区域,绘图区域和状态栏。

菜单区域设置“文件”(新建,保存,打开,退出)用来对文件的不同操作,“更多形状”(画实心矩形,实心圆,实心椭圆)用来扩充绘画功能,“颜色”用来通过调用系统颜色面板选择线条颜色,“帮助”用来添加一些附加信息,画板,作者的介绍等;常用功能区域里面添加了铅笔,直线,矩形,椭圆,圆,橡皮擦,粗细,文字等常用功能按钮用来完成不同的操作,还安置了两个复选框(粗体,斜体)来设置图形式文字输入的状态。

排在North位置绘图区域用来实现操作的操作显示平台,排在Center位置状态栏主要用来纪录鼠标的坐标改变,放在South位置2、工作原理图3、打开已保存的图形文件4、保存绘制的图形三、具体实现1、用户自定义类类名:Huaban作用:生成主界面继承的父类:JFrame主要的类成员:private ObjectInputStream input;private ObjectOutputStream output;输入输出流,打开和保存图像private JButton choices[];存放功能按钮private String names[ ]={ 存放功能按钮的名字 };private String tipText[]={鼠标放到功能按钮上的提示语}private Icon items[];存放各功能按钮的IconIcon wei=new ImageIcon("wang.gif") ;//介绍我的Icon icon=new ImageIcon("mm.gif") ;//说明的ICONIcon icon1=new ImageIcon("nn.gif") ;//输入文字的ICONJToolBar buttonPanel ; //定义功能按钮面板ButtonHandler handler=new ButtonHandler();功能按钮监听1ButtonHandler1 handler1=new ButtonHandler1();功能按钮监听2private JLabel statusBar; //显示鼠标状态的提示条private DrawPanel drawingArea;//画图区域drawings[] itemList=new drawings[5000];//存放基本图形的大数组int index=0; //当前已经绘制的图形数目,图形数组下标private Color color=Color.black;//当前画笔颜色JCheckBox bold,italic;//两个字体选择复选框//开始构造函数Huaban()JMenuBar bar=new JMenuBar(); //定义菜单显示barJMenu fileMenu=new JMenu("文件(F)")//定义文件菜单JMenuItem newItem=new JMenuItem("新建(N)");JMenuItem saveItem=new JMenuItem("保存(S)");JMenuItem openItem=new JMenuItem("打开(L)");JMenuItem exitItem=new JMenuItem("退出(X)");//文件菜单项JMenu shapeMenu=new JMenu("更多形状(P)");//绘图菜单JMenuItem frectItem=new JMenuItem("画实心矩形(F)");JMenuItem fovalItem=new JMenuItem("画实心椭圆(T)");JMenuItem fcircleItem=new JMenuItem("画实心圆(Q)");//菜单项JMenu colorMenu=new JMenu("颜色(C)")//颜色菜单JMenuItem colorItem=new JMenuItem("选择颜色(O)");//菜单项JMenu helpMenu=new JMenu("帮助(H)")//帮助菜单JMenuItem aboutItem=new JMenuItem("关于mini画板!(A)");JMenuItem howItem=new JMenuItem("帮助主题(W)");//帮助菜单项对于定义的一些菜单和菜单项通过bar.add(X)和X.add(Y)来添加到主界面中去的,并且同过函数setMnemonic()来设置这些菜单或菜单项的快捷键,然后通过X.addActionListener (new ActionListener() {public void actionPerformed(ActionEvent e){ 触发相应方法事件 }来实现对菜单项的事件出发。

//创建各种基本图形的按钮,排列功能按钮面板 buttonPanelitems=new ImageIcon[names.length];choices=new JButton[names.length];buttonPanel = new JToolBar( JToolBar.VERTICAL ) ;buttonPanel = new JToolBar( JToolBar.HORIZONTAL) ;//导入图形图标,在功能按钮上加上Icon和提示语tipText[i]for(int i=3;i<choices.length;i++){items[i]=new ImageIcon(names[i] + ".gif");choices[i]=new JButton("",items[i]);choices[i].setPreferredSize(new Dimension(35,30));choices[i].setToolTipText(tipText[i]);buttonPanel.add(choices[i]);//添加按钮实体}//添加对按钮的监听,基本监听者handler注册for(int i=3;i<choices.length-2;i++){ choices[i].addActionListener(handler);currentChoice=j; //对监听到绘制函数中做相应调用}//触发弹出对话框监听者 handler1 注册choices[choices.length-2].addActionListener(handler1);choices[choices.length-1].addActionListener(handler1);//创建和添加字体选择复选框,鼠标状态提示条以及注册bold=new JCheckBox("粗体");italic=new JCheckBox("斜体字");checkBoxHandler cHandler=new checkBoxHandler();bold.addItemListener(cHandler);italic.addItemListener(cHandler);事件注册buttonPanel.add(bold);buttonPanel.add(italic);statusBar=new JLabel();statusBar.setText(" 欢迎使用迷你画板1.00版~_~ ");//设计JFrame整体布局Container c=getContentPane();super.setJMenuBar( bar );c.add(buttonPanel,BorderLayout.NORTH);c.add(drawingArea,BorderLayout.CENTER);c.add(statusBar,BorderLayout.SOUTH);createNewItem();//创建基本图形绘制区域,默认为Pencil绘画 setSize(720,450);setVisible(true);//构造函数结束,类名:ButtonHandler作用:按钮监听器,监听基本的绘图操作继承的父类:ActionListenerpublic class ButtonHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ for(int j=1;j<choices.length-2;j++){ if(e.getSource()==choices[j]){ currentChoice=j;createNewItem();repaint();}类名:ButtonHandler1作用:按钮监听器,监听改线条粗细和添加图形文字继承的父类:ActionListenerpublic class ButtonHandler1 implements ActionListener { public void actionPerformed(ActionEvent e){ if(e.getSource()==choices[choices.length-2]){ setStroke(); }if(e.getSource()==choices[choices.length-1]){ JOptionPane.showMessageDialog(null,"你可以点击画板用来添加文字!","文字输入:",RMATION_MESSAGE,icon1 );currentChoice=9;createNewItem();repaint();} } }类名:drawings作用:定义基本图形单元继承的父类:Serializable主要成员变量:int x1,y1,x2,y2; //坐标属性int R,G,B;float brush; //定义线条粗细属性int type; //定义字体属性String s1;String s2; //定义字体风格属性void draw(Graphics2D g2d){}类名:DrawPanel作用:画图面板,用来绘画继承的父类:JPanelclass DrawPanel extends JPanel{ public DrawPanel(){setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));setBackground(Color.white);addMouseListener(new mouseA());注册事件mouseA()addMouseMotionListener(new mouseB());注册事件mouseB()public void paintComponent(Graphics g){ super.paintComponent(g);Graphics2D g2d=(Graphics2D)g; //定义画笔int j=0;while (j<=index){ draw(g2d,itemList[j]);j++;}}void draw(Graphics2D g2d,drawings i){ i.draw(g2d);} //用来完成各子类的绘图}类名:mouseA作用:用来完成鼠标相应事件操作继承的父类:MouseAdapterclass mouseA extends MouseAdapter{public void mousePressed(MouseEvent e){在状态栏显示鼠标位置;纪录鼠标的坐标;if (当前为随笔画或橡皮擦){将当前位置作为起点和重点的位置,执行绘画函数}if (当前文字输入){当前坐标作为起点位置,终点位置赋空值,执行绘画函数 }}public void mouseReleased(MouseEvent e){在状态栏显示鼠标位置if (当前为随笔画或橡皮擦){将当前位置作为起点}将当前鼠标位置作为终点位置;执行绘画函数;} }类名:mouseB作用:用来完成鼠标拖动和鼠标移动时的相应操作继承的父类:MouseMotionAdapterclass mouseB extends MouseMotionAdapter{public void mouseDragged(MouseEvent e){statusBar.setText(" 鼠标在绘画面板的移动位置:[" + e.getX() + ", " + e.getY() + "]"); if(currentChoice==3||currentChoice==8){ itemList[index-1].x1=itemList[index].x2=itemList[index].x1 =e.getX();itemList[index-1].y1=itemList[index].y2=itemList[index].y1=e.getY(); index++;createNewItem();else { itemList[index].x2=e.getX();itemList[index].y2=e.getY();}repaint();}public void mouseMoved(MouseEvent e){statusBar.setText(" 鼠标在绘画面板的位置:["+ e.getX() + ", " + e.getY() + "]");}}类名:checkBoxHandler作用:用来完成鼠标拖动和鼠标移动时的相应操作继承的父类:ItemListenerprivate class checkBoxHandler implements ItemListener{ public void itemStateChanged(ItemEvent e){if(e.getSource()==bold)//选择粗体复选框if(e.getStateChange()==ItemEvent.SELECTED)f1=Font.BOLD;else f1=Font.PLAIN;if(e.getSource()==italic)//选择斜体复选框if(e.getStateChange()==ItemEvent.SELECTED)f2=Font.ITALIC;else f2=Font.PLAIN;}}2、主要的函数和方法public static void main(String args[]){UIManager.setLookAndFeel()//设置当前界面为Windows风格 Huaban newPad=new Huaban();//调用构造函数windowClosing(WindowEvent e);//WindowAdapter()事件}void createNewItem(x){绘图函数,对currentChoice选择做相应处理,调用case (x):new Pencil();//随笔画,初始颜色为黑色,线条为1.0f new Line();画直线new Rect();画矩形new Oval();画椭圆new Circle(); 画圆new Rubber(); 橡皮擦new Word(); 输入文字new fillRect(); 画填充的矩形,初始填充为黑色cnew fillOval();画填充的椭圆new fillCircle();画填充的圆}public void chooseColor()//选择颜色,调用选色板public void setStroke()//改变线条粗细public void newFile()//新建文件public void saveFile()//保存文件public void openFile()//打开一个文件3、图形编辑系统运行主界面主函数main()调用Huaban()构造函数,通过构造函数构造主界面,然后通过事件监听和事件响应函数实现图形编辑系统的功能,该图形编辑系统的主界面图如下:四、运行调试和分析讨论用JCreator打开Huaban.java文件,编译处理完成后单击执行,出现程序主界面,执行基本操作,截图如下:以上是绘制铅笔画,直线,空心矩,椭圆,空心圆,在更多图形里面选择绘制实心的矩形,椭圆和圆,还有通过橡皮擦擦掉圆的一部分和填充的矩形的一部分,后面的是几个字,展现了文字输入,和字体选择,线条粗细的功能,左边的两条直线也展现粗细功能。

相关主题