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

📄 drawpad.java

📁 画图工具
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package DrawPad;  //生成类包
//引入所需java包
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;


public class DrawPad extends JFrame//定义画板主类
{
	private ObjectInputStream  input;
  	private ObjectOutputStream output;   //定义输入输出流,用来调用和保存图像文件//
	private int currentChoice=0;         //设置默认画图状态为随笔画
	int index=0;                         //当前已经绘制的图形数目
  	private Color color=Color.black;     //当前画笔默颜色默认为黑色
  	int R,G,B;                           //存放当前颜色值
  	private int  stroke=1;               //当前笔画粗细默认为1                   
  	private DrawPanel drawingArea;       //定义画图区域
  	private int width=800,height=600;    //定义画图区域初始大小
  	drawings[] itemList=new drawings[5000];//用来存放基本图形数目的数组
	JMenuItem shapesItem[];              //定义基本绘图菜单按钮数组
  	private JLabel statusBar;            //显示鼠标状态的提示条
  	private String shapeNames[]={
          
        /*画图板上面有的基本的几个绘图单元菜单按钮*/
        
          "Pencil",		//铅笔画,也就是用鼠标拖动着随意绘图
          "Line",		//绘制直线
          "Rect",		//绘制空心矩形
          "fRect",		//绘制以指定颜色填充的实心矩形
          "Square",     //绘制空心正方形
          "fSquare",    //绘制实心正方形 
          "Oval",		//绘制空心椭圆
          "fOval",		//绘制以指定颜色填充的实心椭圆
          "Circle",		//绘制圆形
          "fCircle",	//绘制以指定颜色填充的实心圆形
          "RoundRect",	//绘制空心圆角矩形
          "frRect",		//绘制以指定颜色填充的实心圆角矩形
          "Triangle",   //绘制空心直角三角形
          "Rubber",		//橡皮擦,可用来擦去已经绘制好的图案
         };
  	
	public DrawPad() //构造函数初始化主类
	{
		super("DrawPad");
		ButtonHandler handler=new ButtonHandler();
		JMenuBar menuBar = new JMenuBar();//主菜单条
		JMenu fileMenu = new JMenu("File");//File菜单条
		fileMenu.setMnemonic('F');
		JMenu shapesMenu = new JMenu("Shapes");//绘图菜单条
   		shapesMenu.setMnemonic('S');
   		JMenu colorMenu = new JMenu("Color");//选择颜色菜单条
   		colorMenu.setMnemonic('C');
   		JMenu strokeMenu=new JMenu("Stroke");//选择线条粗细
   		strokeMenu.setMnemonic('T');
		
		//新建文件选项
		JMenuItem newItem = new JMenuItem("New");//
		newItem.setMnemonic('N');
		newItem.addActionListener(
          	new ActionListener(){
                  public void actionPerformed(ActionEvent e){
                   	newFile();		//如果被触发,则调用新建文件函数段
                  }
          }
   		);
   		fileMenu.add(newItem);
   		
   		//Open文件选项
   		JMenuItem openItem = new JMenuItem("Open");
   		openItem.setMnemonic('O');
   		openItem.addActionListener(
          	new ActionListener(){
                  public void actionPerformed(ActionEvent e){
                   	loadFile();		//如果被触发,则调用打开文件函数段
                  }
          }
   		);
   		fileMenu.add(openItem);
   			
   		//Save文件选项
   		JMenuItem saveItem = new JMenuItem("Save");
   		saveItem.setMnemonic('S');
   		saveItem.addActionListener(
          	new ActionListener(){
                  public void actionPerformed(ActionEvent e){
                   	saveFile();		//如果被触发,则调用保存文件函数段
                  }
          }
   		);
   		fileMenu.add(saveItem);
   		fileMenu.addSeparator();//save and exit 菜单按钮之间间隔
   		
   		//Exit绘图选项
   		JMenuItem exitItem = new JMenuItem("Exit");
   		exitItem.setMnemonic('X');
   		exitItem.addActionListener(
          new ActionListener(){
                  public void actionPerformed(ActionEvent e){
                   System.exit(0);	//如果被触发,则退出画图板程序
                  }
          }
   		);
   		
   		fileMenu.add(exitItem);
   		menuBar.add(fileMenu);
 
   		//color选项
   		JMenuItem colorItem = new JMenuItem("Choose Color");
   		colorItem.setMnemonic('o');
   		colorItem.addActionListener(
           new ActionListener(){
                   public void actionPerformed(ActionEvent e)
                   {
                    chooseColor();	//如果被触发,则调用选择颜色函数段
                   }
       		}
      	);
   		colorMenu.add(colorItem);
   		menuBar.add(colorMenu);
   		
   		//stroke选项
   		JMenuItem strokeItem = new JMenuItem("Set Stroke");
   		strokeItem.setMnemonic('k');
   		strokeItem.addActionListener(
   			new ActionListener(){
   				public void actionPerformed(ActionEvent e)
   				{   setStroke();  }
   			}
   		);
   		strokeMenu.add(strokeItem);
   		menuBar.add(strokeMenu);
   	
   		//创建各种图形得按钮
   		shapesItem=new JMenuItem[shapeNames.length];
   		char mnem[]={'P','L','R','f','S','f','O','f','C','f','R','f','T','R'};
   		for(int j=0;j<shapesItem.length;j++){
   			shapesItem[j]=new JMenuItem(shapeNames[j]);
   			shapesItem[j].setMnemonic(mnem[j]);
   			shapesMenu.add(shapesItem[j]);
   			if(j%2==1){//每两个按钮,添加分隔符
   				shapesMenu.addSeparator();
   			}	
   		}
   		menuBar.add(shapesMenu);
   		//将动作侦听器加入按钮里面
   		for(int i=0;i<shapesItem.length;i++){
     		shapesItem[i].addActionListener(handler);
    	}
    		
   		//帮助菜单
   		JMenu helpMenu = new JMenu("Help");
   		helpMenu.setMnemonic('H');
   		JMenuItem aboutItem = new JMenuItem("About this Drawing Pad!");
    	aboutItem.addActionListener(
           new ActionListener(){
                   public void actionPerformed(ActionEvent e)
                    {
                     JOptionPane.showMessageDialog(null,
                        "This is a small drawing pad!\nCopyright (c) 2006 SoftwareEngineering ",
                        " 画图板程序说明 ",
                         JOptionPane.INFORMATION_MESSAGE );
                     }
                   }
              );
    helpMenu.add(aboutItem);
    menuBar.add(helpMenu);

    //创建绘画区
    drawingArea=new DrawPanel();
   	Container c=getContentPane();
    super.setJMenuBar( menuBar );          //菜单工作区
    c.add(drawingArea,BorderLayout.CENTER);
    //statusBar=new JLabel();                //鼠标位置
    //c.add(statusBar,BorderLayout.SOUTH);
    //statusBar.setText("     Welcome To The Little Drawing Pad!!!  :)");
    createNewItem();
    setSize(width,height);
		setVisible(true);		
	}
	
	
	//按钮侦听器ButtonHanler类,内部类,用来侦听基本按钮的操作
public class ButtonHandler implements ActionListener
 {
  public void actionPerformed(ActionEvent e)
  {
   for(int j=0;j<shapesItem.length;j++)
   {
      if(e.getSource()==shapesItem[j])
         {currentChoice=j;
          createNewItem();
          repaint();}
        }
    }
 }

	
	//鼠标事件mouseA类,继承了MouseAdapter,用来完成鼠标相应事件操作
class mouseA extends MouseAdapter
 {
   public void mousePressed(MouseEvent e){
   	statusBar.setText("     Mouse Pressed @:[" + e.getX() +
                              ", " + e.getY() + "]");//设置状态提示

    itemList[index].x1=itemList[index].x2=e.getX();
    itemList[index].y1=itemList[index].y2=e.getY();

    //如果当前选择的图形是随笔画或者橡皮擦,则进行下面的操作
    if(currentChoice==0||currentChoice==13){
    	itemList[index].x1=itemList[index].x2=e.getX();
     	itemList[index].y1=itemList[index].y2=e.getY();
     	index++;
     	createNewItem();
     }
    }

   public void mouseReleased(MouseEvent e)
    {statusBar.setText("     Mouse Released @:[" + e.getX() +
                              ", " + e.getY() + "]");

    if(currentChoice==0||currentChoice==13)
    {
     itemList[index].x1=e.getX();
     itemList[index].y1=e.getY();
    }
     itemList[index].x2=e.getX();
     itemList[index].y2=e.getY();
     repaint();
     index++;
     createNewItem();
    }

   public void mouseEntered(MouseEvent e)
   {
           statusBar.setText("     Mouse Entered @:[" + e.getX() +
                              ", " + e.getY() + "]");
           }

   public void mouseExited(MouseEvent e)
   {
           statusBar.setText("     Mouse Exited @:[" + e.getX() +
                              ", " + e.getY() + "]");
           }
  }


	//鼠标事件mouseB类继承了MouseMotionAdapter,用来完成鼠标拖动和鼠标移动时的相应操作
class mouseB extends MouseMotionAdapter
 {
  public void mouseDragged(MouseEvent e)
  {statusBar.setText("     Mouse Dragged @:[" + e.getX() +
                              ", " + e.getY() + "]");

   if(currentChoice==0||currentChoice==13)
   {
    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("     Mouse Moved @:[" + e.getX() +
                              ", " + e.getY() + "]");}
  }


	//画图面板类,用来画图
class DrawPanel extends JPanel
 {
   public DrawPanel()
  {
   setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
   setBackground(Color.white);
   addMouseListener(new mouseA());
   addMouseMotionListener(new 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);//将画笔传入到各个子类中,用来完成各自的绘图
    }
 }


	//新建一个画图基本单元对象的程序段
  void createNewItem()
  { 
  if(currentChoice==14)//进行相应的游标设置
          drawingArea.setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
          else
          drawingArea.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));

    switch (currentChoice)
    {
      case 0:
        itemList[index]=new Pencil();
        break;
      case 1:
        itemList[index]=new Line();
        break;
      case 2:
        itemList[index]=new Rect();
        break;
      case 3:
        itemList[index]=new fillRect();
        break;
      case 4:
        itemList[index]=new Square();
        break;
      case 5:
        itemList[index]=new fillSquare();

⌨️ 快捷键说明

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