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

📄 drawingeditor.java

📁 一个java写的画图程序, 由两个类组成,不用改直接就可用
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.awt.geom.*;
import java.math.*;
import java.io.*;
import java.util.*;
import javax.swing.filechooser.*;


public class DrawingEditor
{
	public static void main(String[] args)
	{   //创建一个Frame
		JFrame frame=new editorFrame();
	    //设置Frame的退出方式
		frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		//显示Frame
		frame.show();
	}

}

//创建画图用的editorFrame,继承自Jframe
class editorFrame extends JFrame
{
	
//	创建容器
	private Container contentPane;

//	创建画图面版,此画图面板是自己定义的,请参看drawPanel类
	private drawPanel drawingPanel=new drawPanel();

//	按钮定义
//直线按钮
	private JButton lineButton;
//矩形按钮
	private JButton rectButton;
//椭圆按钮
	private JButton ellipseButton;
	private JButton blueBack;
	private JButton greenBack;
	private JButton yellowBack;
	private JButton openButton;
	private JButton createButton;
	private JButton saveButton;

//	工具栏上的“直线”按钮和鼠标事件的切换
//	false:不能画,true:能画
	private boolean lineBoolean=false;
	private boolean rectBoolean=false;
	private boolean ellipseBoolean=false;

//	鼠标按下位置座标,对应鼠标拖动事件的数据传递
	private int linePressedX;
	private int linePressedY;
	private int rectPressedX;
	private int rectPressedY;
	private int ellipsePressedX;
	private int ellipsePressedY;

//	菜单项
	private JMenuItem openItem;
	private JMenuItem saveItem;
	private JMenuItem createItem;
	private JMenuItem exitItem;

//	是否应存盘变量
//	true:应该存盘
//	false:可以不存盘存
	private boolean saveBoolean=false;

//	操作日志
	private JTextArea log;
	static private final String newline = "\n";
	
	//构造方法
	public editorFrame()
	{
	    super("画图编辑器");

		//获得屏幕分辨率
		Toolkit kit=Toolkit.getDefaultToolkit();
		Dimension screenSize=kit.getScreenSize();
		int screenHeight=screenSize.height;
		int screenWidth=screenSize.width;

		//设置屏幕中央
	    setSize(screenWidth / 2 , screenHeight / 2);
        setLocation(screenWidth / 4, screenHeight / 4);

        //设置图标
        Image img=kit.getImage("Icon/drawing.gif");
        setIconImage(img);

        //创建当前面板
		contentPane=getContentPane();

        //设置菜单,创建JMenuBar
		JMenuBar fileMenubar=new JMenuBar();
		//创建JMenu
	    JMenu fileMenu=new JMenu("文件");
	    //创建JMenuItem
	    createItem=new JMenuItem("新建");
	    openItem=new JMenuItem("打开");
	    saveItem=new JMenuItem("保存");
	    exitItem=new JMenuItem("退出");

	    fileMenu.add(createItem);
	    fileMenu.add(openItem);
	    fileMenu.add(saveItem);
	    fileMenu.addSeparator();
	    fileMenu.add(exitItem);
	    
	    //创建MenuAction事件
        menuAction menuItemEvent=new menuAction();

		openItem.addActionListener(menuItemEvent);
		saveItem.addActionListener(menuItemEvent);
		createItem.addActionListener(menuItemEvent);
	    exitItem.addActionListener(menuItemEvent);
	    fileMenubar.add(fileMenu);
	    setJMenuBar(fileMenubar);

        //创建工具栏
		JToolBar toolBar=new JToolBar("工具");
		Action buttonAction=new Action();

		//打开按钮
		openButton=new JButton(new ImageIcon("Icon/open.gif"));
		openButton.addActionListener(menuItemEvent);
		openButton.setToolTipText("打开");

		//新建按钮
		createButton=new JButton(new ImageIcon("Icon/new.gif"));
		createButton.addActionListener(menuItemEvent);
		createButton.setToolTipText("新建");

		//保存按钮
		saveButton=new JButton(new ImageIcon("Icon/save.gif"));
		saveButton.addActionListener(menuItemEvent);
		saveButton.setToolTipText("保存");

		//直线按钮
	    lineButton=new JButton(new ImageIcon("Icon/line.gif"));
	    lineButton.addActionListener(buttonAction);
        lineButton.setToolTipText("直线");
        //矩形按钮
	    rectButton=new JButton(new ImageIcon("Icon/rect.gif"));
	    rectButton.setToolTipText("矩形");
	    rectButton.addActionListener(buttonAction);
	    //椭圆按钮
	    ellipseButton=new JButton(new ImageIcon("Icon/ellipse.gif"));
	    ellipseButton.setToolTipText("椭圆");
	    ellipseButton.addActionListener(buttonAction);
		//背景色按钮
		greenBack=new JButton(new ImageIcon("Icon/green.gif"));
		greenBack.setToolTipText("绿背景色");
		greenBack.addActionListener(buttonAction);
		blueBack=new JButton(new ImageIcon("Icon/blue.gif"));
		blueBack.setToolTipText("蓝背景色");
		blueBack.addActionListener(buttonAction);
		yellowBack=new JButton(new ImageIcon("Icon/yellow.gif"));
		yellowBack.setToolTipText("黄背景色");
		yellowBack.addActionListener(buttonAction);

		toolBar.add(createButton);
		toolBar.add(openButton);
		toolBar.add(saveButton);
	    toolBar.add(lineButton);
	    toolBar.add(rectButton);
	    toolBar.add(ellipseButton);
	    toolBar.add(greenBack);
	    toolBar.add(blueBack);
	    toolBar.add(yellowBack);

	    log = new JTextArea(2,20);
	    log.setBackground(Color.white);

	    log.setMargin(new Insets(6,6,6,6));
		log.setEditable(false);
		JScrollPane logScrollPane = new JScrollPane(log);
		contentPane.add(logScrollPane, BorderLayout.SOUTH);
	    contentPane.add(toolBar,BorderLayout.NORTH);

		//设置观感为windows
		try
		{
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		    SwingUtilities.updateComponentTreeUI(editorFrame.this);
		}
        catch(Exception err) { err.printStackTrace(); }
		}

//***********************************************************************************
//菜单按钮事件
class menuAction implements ActionListener
{
	private boolean createBoolean=false;
	private JFileChooser chooser=new JFileChooser();
	private MouseActEvent mouseAct=new MouseActEvent();

	public void actionPerformed(ActionEvent event)
	{
        //文件-->打开
		if(event.getSource()==openItem||event.getSource()==openButton)
		{
			log.append("这是打开事件."+newline);
			if(saveBoolean==true)
			{
				log.append("这是打开事件,请先保存文件."+newline);
			}
			else
			{

				if(createBoolean==true)contentPane.remove(drawingPanel);

				int returnVal=chooser.showOpenDialog(editorFrame.this);

				if(returnVal==JFileChooser.APPROVE_OPTION)
				{
					String filename=chooser.getSelectedFile().getPath();
					log.append("文件名是:: "+filename+"."+newline);
					//串行输入
					try{
					//输入文件名:filename
			   		FileInputStream fileInput = new FileInputStream(filename);
				    ObjectInputStream objectStream = new ObjectInputStream(fileInput);
				    drawingPanel=(drawPanel)objectStream.readObject();
				    drawingPanel.addMouseListener(mouseAct);
                    drawingPanel.addMouseMotionListener(mouseAct);
				    contentPane.add(drawingPanel,BorderLayout.CENTER);
				    drawingPanel.repaint();
				    editorFrame.this.show();
				    objectStream.close();
				    }
					catch (Exception err)
					{
					log.append("错误"+err.toString()+newline);
					}
		   	 	}
		    	else
		   	   {
					log.append("打开文件被取消."+newline);
				}
			}
		}


		//文件-->新建
		else if(event.getSource()==createItem||event.getSource()==createButton)
		{
			log.append("这是新建事件."+newline);
			if(saveBoolean==true)
			{
				log.append("请保存文件."+newline);
			}
			else
			{
				createBoolean=true;
				drawingPanel.clear();
				drawingPanel.addMouseListener(mouseAct);
		   	    drawingPanel.addMouseMotionListener(mouseAct);
		   	    contentPane.add(drawingPanel,BorderLayout.CENTER);
		   	    drawingPanel.repaint();
		   	    show();
			}
		}


		//文件-->保存
		else if((event.getSource()==saveItem||event.getSource()==saveButton))
		{
			log.append("这是保存事件."+newline);
			int returnVal=chooser.showSaveDialog(editorFrame.this);
			if (returnVal == JFileChooser.APPROVE_OPTION)
			{
				String fileName = chooser.getSelectedFile().getPath();
				//对象串行输出
				try
				{
		       		FileOutputStream fileOut = new FileOutputStream(fileName);
			    	ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);
					objectOut.writeObject(drawingPanel);
					objectOut.close();
					saveBoolean=false;
					log.append("保存文件成功."+newline);
				 }
				 catch (IOException err)
				 {
					log.append("错误 -- "+err.toString()+"."+newline);
		    	 }

		 	}
		    else
		    {
				log.append("取消文件保存."+newline);
            }
		}


		//文件-->退出
		else if(event.getSource()==exitItem)
		{
			log.append("这是退出事件."+newline);
			if(saveBoolean==true)
			{
				log.append("请保存文件."+newline);
			}
			else
			{
				System.exit(0);
			}
		}
	}
}

//***********************************************************************************
//工具栏按钮事件
class Action implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
		if(event.getSource()==lineButton)
		{
		     log.append("这是直线按钮事件." + newline);
		     lineBoolean=true;
		     rectBoolean=false;
		     ellipseBoolean=false;
		     drawingPanel.dynamicArray(0,0,0,0,1);
		}
		else if(event.getSource()==rectButton)
		{
			log.append("这是矩形按钮事件."+newline);
			rectBoolean=true;
			lineBoolean=false;
			ellipseBoolean=false;
			drawingPanel.dynamicArray(0,0,0,0,2);

		}
		else if(event.getSource()==ellipseButton)
		{
			log.append("这是椭圆按钮事件."+newline);
			ellipseBoolean=true;
			lineBoolean=false;
			rectBoolean=false;
			drawingPanel.dynamicArray(0,0,0,0,3);

		}
		else if(event.getSource()==blueBack)
		{
			log.append("这是蓝背景色."+newline);
			drawingPanel.setBackground(Color.blue);

		}
		else if(event.getSource()==greenBack)
		{
			log.append("这是绿背景色."+newline);
			drawingPanel.setBackground(Color.green);

		}
		else if(event.getSource()==yellowBack)
		{
			log.append("这是黄背景色."+newline);
			drawingPanel.setBackground(Color.yellow);

         }
    }

}

//***********************************************************************************
//鼠标事件
class MouseActEvent extends MouseAdapter implements MouseMotionListener
{

 	public void mouseDragged(MouseEvent event)
	{
       if(lineBoolean==true)
       {
		   saveBoolean=true;
		   drawingPanel.dynamic(linePressedX,linePressedY,event.getX(),event.getY());
		   drawingPanel.repaint();
       }
       else if(rectBoolean==true)
       {
		   saveBoolean=true;
		   drawingPanel.dynamic(rectPressedX,rectPressedY,event.getX(),event.getY());
		   drawingPanel.repaint();
	   }
	   else if(ellipseBoolean==true)
	   {
		   saveBoolean=true;
		   drawingPanel.dynamic(ellipsePressedX,ellipsePressedY,event.getX(),event.getY());
		   drawingPanel.repaint();
	   }
	}


    public void  mousePressed(MouseEvent event)
	{
	   if(lineBoolean==true)
       {
            linePressedX=event.getX();
	        linePressedY=event.getY();
	   }
	   if(rectBoolean==true)
	   {
	        rectPressedX=event.getX();
            rectPressedY=event.getY();
	   }
	   if(ellipseBoolean==true)
	   {
			ellipsePressedX=event.getX();
			ellipsePressedY=event.getY();

		}
    }


    public void mouseReleased(MouseEvent event)
    {
		if(lineBoolean==true)
		{
			drawingPanel.dynamicArray(linePressedX,linePressedY,event.getX(),event.getY(),1);
			drawingPanel.repaint();

		}
		if(rectBoolean==true)
		{
			drawingPanel.dynamicArray(rectPressedX,rectPressedY,event.getX(),event.getY(),2);
	        drawingPanel.repaint();
        }
        if(ellipseBoolean==true)
        {
			drawingPanel.dynamicArray(ellipsePressedX,ellipsePressedY,event.getX(),event.getY(),3);
			drawingPanel.repaint();
		}

	}

	public void mouseMoved(MouseEvent event)
	{

	}

}

}

⌨️ 快捷键说明

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