public void Save()
	{
		BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
		Graphics2D g = bi.createGraphics();
		g.setColor(draw_surface.getBackground());
		g.fillRect(0, 0, 789, 456);
		g.setColor(Color.black);
		for(int i = 0; i < trace.size(); i++)
		{
			int x1 = trace.get(i).getX1(),
					y1 = trace.get(i).getY1(),
					x2 = trace.get(i).getX2(),
					y2 = trace.get(i).getY2();
			g.drawLine(x1, y1, x2, y2);
			if(dist(x1, y1, x2, y2) > 80)
				g.drawString(trace.get(i).name, (x1+x2)/2, (y1+y2)/2);

		}
		for(int i = 0; i < coord.size(); i++)
		{
			g.setColor(draw_surface.getBackground());
			g.fillOval(coord.get(i).x-26, coord.get(i).y-26, 50, 50);
			g.setColor(Color.black);
			g.drawOval(coord.get(i).x-25, coord.get(i).y-25, 50, 50);
			if(coord.get(i).isEnd())
			{
				g.drawOval(coord.get(i).x-20, coord.get(i).y-20, 40, 40);			
			}
			if(coord.get(i).isStart())
			{
				g.drawLine(coord.get(i).x - 25, coord.get(i).y, coord.get(i).x - 100, coord.get(i).y);
				g.drawLine(coord.get(i).x - 25, coord.get(i).y, coord.get(i).x - 50, coord.get(i).y + 15);
				g.drawLine(coord.get(i).x - 25, coord.get(i).y, coord.get(i).x - 50, coord.get(i).y - 15);
			}
			g.drawString(coord.get(i).name, coord.get(i).x-5, coord.get(i).y+5);			
		}
		FileDialog fc = new FileDialog(this, "Save", FileDialog.SAVE);
		fc.setFile("untitled.png");	
		fc.setDirectory("c://");
		fc.setVisible(true);
		String fn = fc.getFile();
		if(fn == null)
		{
			//System.out.println("cancel");
		}
		else
		{
			try{
				ImageIO.write(bi, "png", new File(fn));
			}
			catch(IOException ioe)
			{
				ioe.printStackTrace();
			}
		}
		fc.setVisible(false);	
		write_graph(fn.substring(0, fn.length() - 4));
	}