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

📄 paintboxframe.java

📁 利用java编写的paintbox小程序
💻 JAVA
字号:
/*
 * PaintBoxFrame.java
 *
 * Created on 2007年4月23日, 下午11:56
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package paintbox;

/**
 *
 * @author fly
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;

public class PaintBoxFrame extends JFrame{
    
    /** Creates a new instance of PaintBoxFrame */
   private DrawingPanel drawingPanel;
   private JMenuItem saveMenuItem, saveAsMenuItem;
   private ArrayList currentDrawnItems;
   private Shape copyShape;
   private  JMenuItem cutMenuItem,copyMenuItem,pasteMenuItem,quashMenuItem;
   private JMenu editMenu;

   //-----------------------------------------------------------------
   //  构造函数,构造主窗口
   //-----------------------------------------------------------------
   public PaintBoxFrame ()
   {
      super ("PaintBox ");
      
      copyShape=null;
      ButtonBar buttons = new ButtonBar ();
      drawingPanel = new DrawingPanel (buttons);
      currentDrawnItems=drawingPanel.getDrawnItems();
      JMenuBar menuBar = createMenuBar ();
      setJMenuBar (menuBar);

      JPanel appPanel = new JPanel ();
      appPanel.setLayout (new BorderLayout ());
      appPanel.add (drawingPanel, BorderLayout.CENTER);
      appPanel.add (buttons, BorderLayout.NORTH);

      getContentPane ().add (appPanel);
      addWindowListener (new WindowCloser ());
   }

   //-----------------------------------------------------------------
   //  创建菜单栏(包括“Edit"和"File")
   //-----------------------------------------------------------------
   public JMenuBar createMenuBar ()
   {
      MenuListener menuListener = new MenuListener ();

      JMenu fileMenu = new JMenu ("File");
      fileMenu.addMouseListener (new Listener());

      JMenuItem newMenuItem = new JMenuItem ("New");
      newMenuItem.addActionListener (menuListener);
      newMenuItem.setEnabled (true);

      JMenuItem openMenuItem = new JMenuItem ("Open");
      openMenuItem.addActionListener (menuListener);
      openMenuItem.setEnabled (true);

      saveMenuItem = new JMenuItem ("Save");
      saveMenuItem.addActionListener (menuListener);
      saveMenuItem.setEnabled (true);

      saveAsMenuItem = new JMenuItem ("Save As");
      saveAsMenuItem.addActionListener (menuListener);
      saveAsMenuItem.setEnabled (true);
      
      JMenuItem aboutMenuItem = new JMenuItem ("About...");
      aboutMenuItem.addActionListener (menuListener);
      aboutMenuItem.setEnabled (true);

      JMenuItem exitMenuItem = new JMenuItem ("Exit");
      exitMenuItem.addActionListener (menuListener);

      fileMenu.add (newMenuItem);
      fileMenu.add (openMenuItem);
      fileMenu.add (saveMenuItem);
      fileMenu.add (saveAsMenuItem);
      fileMenu.add (aboutMenuItem);
      fileMenu.addSeparator ();
      fileMenu.addSeparator ();
      fileMenu.add (exitMenuItem);

      JMenu editMenu = new JMenu ("Edit");
      editMenu.addMouseListener(new Listener());

      cutMenuItem = new JMenuItem ("Cut");
      cutMenuItem.addActionListener (menuListener);
      cutMenuItem.setEnabled (false);

      copyMenuItem = new JMenuItem ("Copy");
      copyMenuItem.addActionListener (menuListener);
      copyMenuItem.setEnabled (false);

      pasteMenuItem = new JMenuItem ("Paste");
      pasteMenuItem.addActionListener (menuListener);
      pasteMenuItem.setEnabled (false);
      
      quashMenuItem=new JMenuItem("Quash Color");
      quashMenuItem.addActionListener(menuListener);
      quashMenuItem.setEnabled(false);

      editMenu.add (cutMenuItem);
      editMenu.add (copyMenuItem);
      editMenu.add (pasteMenuItem);
      editMenu.add(quashMenuItem);

      JMenuBar bar = new JMenuBar ();
      bar.add (fileMenu);
      bar.add (editMenu);

      return bar;
   }

  
   
   //*****************************************************************
   //  处理关闭窗口的类(开始)
   //*****************************************************************
   public class WindowCloser extends WindowAdapter
   {
      //--------------------------------------------------------------
      //  Terminates the program when the window is closed.
      //--------------------------------------------------------------
      public void windowClosing (WindowEvent event)
      {
              int save;
              if(!drawingPanel.isSaved())
              {
                  save=JOptionPane.showConfirmDialog(null,"你所画内容尚未保存,是否要保存?");
                  if(save==JOptionPane.YES_OPTION)
                  {
                      MenuListener listener=new MenuListener();
                      listener.saveItem();
                  }
                      
              }
         System.exit (0);
      }
   }
   //*****************************************************************
   //  处理关闭窗口的类(结束)
   //*****************************************************************

   
   
   
   //*****************************************************************
   //  处理菜单的类(开始)
   //*****************************************************************
   public class MenuListener implements ActionListener
   {
      //--------------------------------------------------------------
      //  Handles action events caused by menu selections.
      //--------------------------------------------------------------
      public void actionPerformed (ActionEvent event)
      {
          String command;
          command=event.getActionCommand ();
          
          if (command.equals ("Exit"))//"Exit"菜单项
          {
              int save;
              if(!drawingPanel.isSaved())
              {
                  save=JOptionPane.showConfirmDialog(null,"你所画内容尚未保存,是否要保存?");
                  if(save==JOptionPane.YES_OPTION)
                      saveItem();
              }
              System.exit (0);
          }
          
          else if(command.equals("About..."))
          {
              JOptionPane.showMessageDialog
                      (null,"欢迎使用PaintBox\n");
          }
            
          else if(command.equals("New"))//"New"菜单项
          {
              int save;
              if(!drawingPanel.isSaved())
              {
                  save=JOptionPane.showConfirmDialog(null,"你所画内容尚未保存,是否要保存?");
                  if(save==JOptionPane.YES_OPTION)
                      saveItem();
              }
              currentDrawnItems.clear();
              drawingPanel.setDrawnItems(currentDrawnItems);
              drawingPanel.setOpenFromFile(false);
          }
          
          else if(command.equals("Save As"))//"Save As"菜单项
          {
              drawingPanel.quashSlectedItem();
              JFileChooser jfc=new JFileChooser();
              if(jfc.showSaveDialog(drawingPanel)==JFileChooser.APPROVE_OPTION)
                  save(jfc.getSelectedFile());
              drawingPanel.setOpenFromFile(true);
              drawingPanel.setOpenFile(jfc.getSelectedFile());
              drawingPanel.setSaved();
          }
          
          else if(command.equals("Open"))   //"Open"菜单项
          {
              int save;
              if(!drawingPanel.isSaved())
              {
                  save=JOptionPane.showConfirmDialog(null,"你没有保存,是否要保存?");
                  if(save==JOptionPane.YES_OPTION)
                      saveItem();
              }
              JFileChooser jfc=new JFileChooser();
              if(jfc.showOpenDialog(drawingPanel)==JFileChooser.APPROVE_OPTION)
                  open(jfc.getSelectedFile()); 
              drawingPanel.setOpenFromFile(true);
              drawingPanel.setOpenFile(jfc.getSelectedFile());
          }
          
          else if(command.equals("Save"))
          {
              drawingPanel.quashSlectedItem();//先取消选择
               saveItem();//此处本应该和"Save AS"菜单项一样实现,但为了在"New"、"Open"中引用相同处理过程,故单独处理
               drawingPanel.setSaved();
          }
          
          else if(command.equals("Copy"))
          {
              if(drawingPanel.getSlectedItem()!=-1)
              {
                  copyShape=(Shape)((Shape)(currentDrawnItems.get(drawingPanel.getSlectedItem()))).clone();
                  pasteMenuItem.setEnabled(true);
                  drawingPanel.quashSlectedItem();
                  
              }
          }
          
          else if(command.equals("Cut"))
          {
              if(drawingPanel.getSlectedItem()!=-1)
              {
                  copyShape=(Shape)(currentDrawnItems.get(drawingPanel.getSlectedItem()));
                  currentDrawnItems.remove(drawingPanel.getSlectedItem());
                  drawingPanel.setDrawnItems(currentDrawnItems);
                  pasteMenuItem.setEnabled(true);
              } 
          }
          
          else if(command.equals("Paste"))
          {
              Shape shape=(Shape)copyShape.clone();
              copyShape=shape;
              shape.positionChanged(10,10);
              currentDrawnItems.add(shape);
              drawingPanel.setDrawnItems(currentDrawnItems);
          }
          
          else if(command.equals("Quash Color"))
          {
              if(drawingPanel.getSlectedItem()!=-1)
              {
                  ((BoundedShape)(currentDrawnItems.get(drawingPanel.getSlectedItem()))).setUnFilled();
                  drawingPanel.quashSlectedItem();
                  drawingPanel.setDrawnItems(currentDrawnItems);
              } 
          }
      }
      
      public  void saveItem()     //保存函数(同时被“SAVE”菜单项和刷新视区时调用)
      {
           if(drawingPanel.isOpenFromFile())
           {
               save(drawingPanel.getOpenFile());
           }
           else
           {
              JFileChooser jfc=new JFileChooser();
              if(jfc.showSaveDialog(drawingPanel)==JFileChooser.APPROVE_OPTION)
                  save(jfc.getSelectedFile());
              drawingPanel.setOpenFromFile(true);
              drawingPanel.setOpenFile(jfc.getSelectedFile());
              drawingPanel.setSaved();
           }
      }
              
      private void save(File file)    //内部函数,执行保存过程
      {
         ObjectOutputStream out;
          try{
              out=new ObjectOutputStream(new FileOutputStream(file));
              Integer inte=new Integer(currentDrawnItems.size());
              out.writeObject(inte);
              for(int i=0; i<currentDrawnItems.size(); i++)
                    out.writeObject(currentDrawnItems.get(i));
              out.close();
          }
          catch(IOException ex)
          {
              System.out.println(ex);
          }
      }
      
      private void open(File file)  //内部函数,执行打开过程
      {
         ObjectInputStream in;
          try{
              in=new ObjectInputStream(new FileInputStream(file));
              Integer inte=(Integer)in.readObject();
              int objectNum=inte.intValue();
              currentDrawnItems.clear();
              for(int i=0; i<objectNum; i++)
                    currentDrawnItems.add((Shape)in.readObject());
              in.close();
          }
          catch(IOException ex)
          {
              System.out.println(ex);
          }
         catch(ClassNotFoundException ex2)
         {
             System.out.println(ex2);
         }
         drawingPanel.setDrawnItems(currentDrawnItems);
      }     
   }
   
   //*****************************************************************
   //  处理菜单的类(结束)
   //*****************************************************************
   
   
   
   //*****************************************************************
   //  控制菜单中菜单项可不可用的类(开始)
   //*****************************************************************
   private class Listener extends MouseAdapter
   {
       public void mouseEntered(MouseEvent event)
       {
               if(drawingPanel.getSlectedItem()!=-1)
               {
                   cutMenuItem.setEnabled(true);
                   copyMenuItem.setEnabled(true);
                   if(currentDrawnItems.get(drawingPanel.getSlectedItem()) instanceof BoundedShape)
                   {
                       quashMenuItem.setEnabled(true);
                   }
                   else
                       quashMenuItem.setEnabled(false);
               }
               else
               {
                   cutMenuItem.setEnabled(false);
                   copyMenuItem.setEnabled(false);
                   quashMenuItem.setEnabled(false);
               }  
               if(drawingPanel.isSaved())
                   saveMenuItem.setEnabled(false);
               else
                   saveMenuItem.setEnabled(true);
       }
   }
   //*****************************************************************
   //  控制"Edit"菜单中类可不可用的类(结束)
   //*****************************************************************
}

⌨️ 快捷键说明

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