⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawframe.java

📁 面向对象的设计思想
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;

import javax.swing.*;

import java.util.*;
import java.io.*;
//布置画图界面的类
public class DrawFrame extends JFrame 
{
	//声明画布变量
	private DrawCanvas canvas;
	private DrawModel model;
	//用于保存文件
	private File file;
	private static int FrameNo=0;
	private int FrameId;
	public static final int LIN=1;
	public static final int REC=2;
	public static final int CIR=3;
	public static final int SF=4;
	public static final int MOVE=5;
	private ArrayList listeners = new ArrayList(10);
	
	public DrawFrame(DrawModel model)
	{
		this.model=model;
		FrameId=++FrameNo;
		 buildDisplay();
				
	}
	
	private void buildDisplay()
	{
		setLocation(100,100);
		setSize(500,300);
		setTitle("画图");
		
		
		//设置菜单栏
		JMenu fileMenu =new JMenu("文件");
		JMenu editMenu =new JMenu("编辑");
		JMenu seeMenu =new JMenu("查看");
		JMenu picMenu =new JMenu("图像");
		JMenu colMenu =new JMenu("颜色");
		JMenu helpMenu =new JMenu("帮助");
		
		//完成file 菜单功能
		JMenuItem newItem=fileMenu.add(new TestAction("新建"));
		JMenuItem openItem=fileMenu.add(new TestAction("打开"));
		fileMenu.addSeparator();
		JMenuItem saveItem=fileMenu.add(new TestAction("保存"));
		JMenuItem saveAsItem=fileMenu.add(new TestAction("另存为"));
		fileMenu.addSeparator();
		fileMenu.add(new AbstractAction("退出"){
				public void actionPerformed(ActionEvent e)
				{
					System.exit(0);
				}
		});
		JMenuBar menuBar=new JMenuBar();
		setJMenuBar(menuBar);
		menuBar.add(fileMenu);
		menuBar.add(editMenu);
		menuBar.add(seeMenu);
		menuBar.add(picMenu);
		menuBar.add(colMenu);
		menuBar.add(helpMenu);
		saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
				InputEvent.CTRL_MASK));
		openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
				InputEvent.CTRL_MASK));
		
		//设置工具栏
		Action recAction =new ShapeAction("□画矩形");
		Action cirAction =new ShapeAction("○画圆形");
		Action linAction =new ShapeAction("\画直线");
		Action sfAction =new ShapeAction("缩放图形");
		Action moveAction=new ShapeAction("移动图形");
		JToolBar bar =new JToolBar();
		bar.add(recAction);
		bar.add(cirAction);
		bar.add(linAction);
		bar.add(sfAction);
		bar.add(moveAction);
		bar.setOrientation(1);
		//布局画图工具窗口
		add(bar,BorderLayout.WEST);
		
		canvas=new DrawCanvas( model);
		DrawController con = new DrawController(model, canvas);
		add(canvas,BorderLayout.CENTER);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        canvas.refresh();
	}
	
	//处理工具栏 发生事件的类
	private class ShapeAction extends AbstractAction{
		public ShapeAction(String n)
		{
			super(n);
		}
		//分别设定发生的事件改变canvas类中的selected
		public void actionPerformed (ActionEvent e)
		{
			
			if(getValue(Action.NAME).equals("□画矩形"))
				model.setSel(REC)	;
				else if(getValue(Action.NAME).equals("○画圆形"))
					model.setSel(CIR)	;
				else if(getValue(Action.NAME).equals("\画直线"))
					model.setSel(LIN)	;
				else if(getValue(Action.NAME).equals("缩放图形"))
					model.setSel(SF)	;
				else if(getValue(Action.NAME).equals("移动图形"))
					model.setSel(MOVE)	;
				
			
		}
	}
	//处理菜单栏发生事件的类
	private class TestAction extends AbstractAction{
		public TestAction(String n)
		{
			super(n);
		}
		public void actionPerformed (ActionEvent e){
			
			if(getValue(Action.NAME).equals("新建"))
			{
				model.deletShapes();
				file = null;
			}
			else if(getValue(Action.NAME).equals("打开"))
			{
					JFileChooser chooser = new JFileChooser();
					int result = chooser.showOpenDialog(DrawFrame.this);
					if (result == JFileChooser.APPROVE_OPTION) {
						file = chooser.getSelectedFile();
						DataInputStream dIn = null;
						try {
								dIn = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
						    } catch (FileNotFoundException ex) {
									ex.printStackTrace();
							}
						if (result == JFileChooser.APPROVE_OPTION) {
							model.deletShapes();
							try {
									Integer i = 0;
									SubShape s = null;
							
									while(dIn.readBoolean()){
										//i = dIn.readInt();
										/*switch (i) {
										case LIN:					
											s = new Line2D.Double(dIn.readDouble(),dIn.readDouble(),dIn.readDouble(),dIn.readDouble());
											break;
										case REC:
											s = new Rectangle2D.Double(dIn.readDouble(),dIn.readDouble(),dIn.readDouble(),dIn.readDouble());
											break;
										case CIR:
											s = new Ellipse2D.Double(dIn.readDouble(),dIn.readDouble(),dIn.readDouble(),dIn.readDouble());
											break;
										default:
											break;
										}*/
										s=new SubShape(dIn.readInt(),dIn.readInt(),dIn.readInt(),dIn.readInt(),dIn.readInt());
										model.addShapes(s);
									}
									dIn.close();
								} catch (Exception ex) {
											JOptionPane.showMessageDialog(null, "Error when Opening!");
									}
							}
					}
			}
				else if(getValue(Action.NAME).equals("保存")) {
					if (file == null) {
						JFileChooser chooser = new JFileChooser();
						int result = chooser.showSaveDialog(DrawFrame.this );
						file = chooser.getSelectedFile();
					}
					if (file != null) {
						DataOutputStream dOut = null;
						try {
							dOut = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
						} catch (FileNotFoundException ex) {
							ex.printStackTrace();
						}
						try {
							for (int i = 0; i <model.getShapes().size(); i++) {
								SubShape s = model.getShapes().get(i);
								dOut.writeBoolean(true);
								/*if (s instanceof Line2D.Double) {
									dOut.writeInt(model.LIN);
									dOut.writeDouble(((Line2D.Double)s).getX1());
									dOut.writeDouble(((Line2D.Double)s).getY1());
									dOut.writeDouble(((Line2D.Double)s).getX2());
									dOut.writeDouble(((Line2D.Double)s).getY2());
								} else if (s instanceof Rectangle2D.Double) {
									dOut.writeInt(model.REC);
									dOut.writeDouble(((Rectangle2D.Double)s).getX());
									dOut.writeDouble(((Rectangle2D.Double)s).getY());
									dOut.writeDouble(((Rectangle2D.Double)s).getWidth());
									dOut.writeDouble(((Rectangle2D.Double)s).getHeight());
								} else if (s instanceof Ellipse2D.Double) {
									dOut.writeInt(model.CIR);
									dOut.writeDouble(((Ellipse2D.Double)s).getX());
									dOut.writeDouble(((Ellipse2D.Double)s).getY());
									dOut.writeDouble(((Ellipse2D.Double)s).getWidth());
									dOut.writeDouble(((Ellipse2D.Double)s).getHeight());
								}*/	
								dOut.writeInt(s.getsel());
								dOut.writeInt(s.getX1());
								dOut.writeInt(s.getY1());
								dOut.writeInt(s.getX2());
								dOut.writeInt(s.getY2());
							}
							dOut.writeBoolean(false);
							dOut.close();
						} catch (IOException ex) {
							ex.printStackTrace();
						}
					}
		}else if (getValue(Action.NAME).equals("另存为")) {
			JFileChooser chooser = new JFileChooser();
			int result = chooser.showSaveDialog(DrawFrame.this );
			file = chooser.getSelectedFile();
			DataOutputStream dOut = null;
			try {
				dOut = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
			} catch (FileNotFoundException ex) {
				ex.printStackTrace();
			}
			if (result == JFileChooser.APPROVE_OPTION) {
				try {
					for (int i = 0; i < model.getShapes().size(); i++) {
						SubShape s = model.getShapes().get(i);
						dOut.writeBoolean(true);
						/*if (s instanceof Line2D.Double) {
							dOut.writeInt(model.LIN);
							dOut.writeDouble(((Line2D.Double)s).getX1());
							dOut.writeDouble(((Line2D.Double)s).getY1());
							dOut.writeDouble(((Line2D.Double)s).getX2());
							dOut.writeDouble(((Line2D.Double)s).getY2());
						} else if (s instanceof Rectangle2D.Double) {
							dOut.writeInt(model.REC);
							dOut.writeDouble(((Rectangle2D.Double)s).getX());
							dOut.writeDouble(((Rectangle2D.Double)s).getY());
							dOut.writeDouble(((Rectangle2D.Double)s).getWidth());
							dOut.writeDouble(((Rectangle2D.Double)s).getHeight());
						} else if (s instanceof Ellipse2D.Double) {
							dOut.writeInt(model.CIR);
							dOut.writeDouble(((Ellipse2D.Double)s).getX());
							dOut.writeDouble(((Ellipse2D.Double)s).getY());
							dOut.writeDouble(((Ellipse2D.Double)s).getWidth());
							dOut.writeDouble(((Ellipse2D.Double)s).getHeight());
						}	*/
						dOut.writeInt(s.getsel());
						dOut.writeInt(s.getX1());
						dOut.writeInt(s.getY1());
						dOut.writeInt(s.getX2());
						dOut.writeInt(s.getY2());
					}
					dOut.writeBoolean(false);
					dOut.close();
				} catch (IOException ex) {
					ex.printStackTrace();
				}
			}
		} 
	}
}
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -