Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Исходный текст программы ClassSerialize.java

Оглавление

Назад

// ==========================================
// ClassSerialize.java
// (C) Alexandr Frolov, 1998
// E-mail: frolov@glasnet.ru
// Web:    http://www.glasnet.ru/~frolov 
// ==========================================
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;

public class ClassSerialize
{
  public static void main(String args[])
  {
    FrameWindow frame;
    frame =  new FrameWindow(
      "Draw Rectangles and save");
    frame.setVisible(true);
  }
}

// =======================================
// Class MyRects
// =======================================
class MyRects
  implements Serializable
{
  Vector lines;
  Vector colors;
  String s;
  int nVersionMajor;
  int nVersionMinor;
  
  public MyRects()
  {  
    lines = new Vector();    
    colors = new Vector();    
    s = "My own serializable class";  
    nVersionMajor = 1;
    nVersionMinor = 0;
  }  
}

// =======================================
// Class FrameWindow
// =======================================
class FrameWindow extends Frame
  implements ActionListener, WindowListener, 
  MouseListener, MouseMotionListener
{
  MenuBar mb;
  
  Menu mFile;
  MenuItem miOpen;
  MenuItem miSave;
  MenuItem miExit;
  
  FileDialog fdlg;
  
  Dimension dmDown = new Dimension(0, 0);
  Dimension dmUp = new Dimension(0, 0);  
  Dimension dmPrev = new Dimension(0, 0);  
  
  boolean bDrawing = false;
  
  MyRects mr = new MyRects();
  
  // ============================================
  // FrameWindow
  // ============================================
  public FrameWindow(String szTitle)
  {
    super(szTitle);
    setSize(400, 300);
    
    mb = new MenuBar();
    mFile = new Menu("File");
    
    miOpen = new MenuItem("Open...");
    mFile.add(miOpen);
    
    miSave = new MenuItem("Save As...");
    mFile.add(miSave);
    
    mFile.add("-");
    
    miExit = new MenuItem("Exit");
    mFile.add(miExit);
    
    mb.add(mFile);
    
    miOpen.addActionListener(this);
    miSave.addActionListener(this);
    miExit.addActionListener(this);
    
    setMenuBar(mb);
    
    this.addWindowListener(this);
    
    bDrawing = false;
    
    this.addMouseMotionListener(this);
    this.addMouseListener(this);
  }

  // ============================================
  // paint
  // ============================================
  public void paint(Graphics g)
  {
    Dimension dimAppWndDimension = getSize();

    setBackground(Color.yellow);
    g.setColor(Color.black);

    for (int i=0; i < mr.lines.size(); i++) 
    {
      Rectangle p = 
        (Rectangle)mr.lines.elementAt(i);
	
      Color clr = (Color)mr.colors.elementAt(i);
      g.setColor(clr);
	
      g.drawRect(p.x, p.y, p.width, p.height);
    }
    bDrawing = false;
  }

  // ============================================
  // actionPerformed
  // ============================================
  public void actionPerformed(ActionEvent e)
  {
    if(e.getSource().equals(miOpen))
    {
      fdlg = new FileDialog(this, "Open file", 
	FileDialog.LOAD);
      fdlg.show();
      
      ObjectInputStream ois;
     
      try
      {
        ois = new ObjectInputStream(
          new FileInputStream(
            fdlg.getDirectory() +
            fdlg.getFile()));
	    
	mr = (MyRects)ois.readObject();    
	ois.close();
      }
      catch (IOException ex)
      {
        System.out.println(ex.toString());
      }
      catch (ClassNotFoundException ex)
      {
        System.out.println(ex.toString());
      }
      
      repaint();
    }
    
    else if(e.getSource().equals(miSave))
    {
      fdlg = new FileDialog(this,
        "Save drawing as...", 
	FileDialog.SAVE);
      fdlg.show();
      
      ObjectOutputStream oos;
     
      try
      {
        oos = new ObjectOutputStream(
          new FileOutputStream(
            fdlg.getDirectory() +
            fdlg.getFile()));
	    
	oos.writeObject(mr);    
	oos.flush();
	oos.close();
      }
      catch (IOException ex)
      {
        System.out.println(ex.toString());
      }
    }
      
    else if(e.getSource().equals(miExit))
    {
      setVisible(false);
      System.exit(0);
    }
  }
  
  // ============================================
  // windowClosing
  // ============================================
  public void windowClosing(WindowEvent e)
  {
    setVisible(false);
    System.exit(0);
  }
  
  public void windowOpened(WindowEvent e) {}
  public void windowClosed(WindowEvent e) {}
  public void windowIconified(WindowEvent e) {}
  public void windowDeiconified(WindowEvent e) {}
  public void windowActivated(WindowEvent e) {}
  public void windowDeactivated(WindowEvent e) {}
  
  // ============================================
  // mousePressed
  // ============================================
  public void mousePressed(MouseEvent e)
  {
    int x = e.getX();
    int y = e.getY();
    
    if(e.getClickCount() > 1)
    {
      mr.lines.removeAllElements();
      repaint();
      return;
    }

    dmDown = new Dimension(x, y);
    dmPrev = new Dimension(x, y);
    bDrawing = false;  
  }

  // ============================================
  // mouseReleased
  // ============================================
  public void mouseReleased(MouseEvent e)
  {
    int x = e.getX();
    int y = e.getY();
    
    if(bDrawing)    
    {
      dmUp = new Dimension(x, y);
      
      mr.lines.addElement(
        new Rectangle(
          dmDown.width, dmDown.height, 
          x - dmDown.width, y - dmDown.height));
	
      int rColor, gColor, bColor;
	
      rColor = (int)(255 * Math.random());
      gColor = (int)(255 * Math.random());
      bColor = (int)(255 * Math.random());
      Color clr = 
        new Color(rColor, gColor, bColor);
	
      mr.colors.addElement(clr);
	
      repaint();      
      bDrawing = false;    
    }  
  }
  
  // ============================================
  // mouseDragged
  // ============================================
  public void mouseDragged(MouseEvent e)
  {
    int x = e.getX();
    int y = e.getY();

    Graphics g = getGraphics();
    bDrawing = true;

    g.setColor(Color.yellow);
    g.drawRect(dmDown.width, dmDown.height,
      dmPrev.width, dmPrev.height);

    g.setColor(Color.black);
    g.drawRect(dmDown.width, dmDown.height,
      x - dmDown.width, y - dmDown.height);

    dmPrev = new Dimension(x - dmDown.width, 
      y - dmDown.height);
  }
  
  // ============================================
  // mouseMoved
  // ============================================
  public void mouseMoved(MouseEvent e)
  {
    bDrawing = false;    
  }
  
  // ============================================
  // mouseClicked
  // ============================================
  public void mouseClicked(MouseEvent e)
  {
  }
  
  // ============================================
  // mouseEntered
  // ============================================
  public void mouseEntered(MouseEvent e)
  {
  }
  
  // ============================================
  // mouseExited
  // ============================================
  public void mouseExited(MouseEvent e)
  {
  }
}

[Назад]