import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Window extends JFrame implements ActionListener
{	
	public static void main(String[] arg)
	{
		JFrame.setDefaultLookAndFeelDecorated(true);
		Window WMain = new Window("Fiskar");
		WMain.setExtendedState(JFrame.MAXIMIZED_BOTH);
	}
	
	JMenuBar bar;
	JMenu arkiv;
	JMenuItem item_arkiv;
	Graphics g;
	Canvas c; 
	Color mat_color = new Color(255,0,0);
	Color rov_color = new Color(0,255,0);
	Container con;
	
	int[] xArray = new int[200];
	int[] matfiskar = new int[200];
	int[] rovfiskar = new int[200];
	
	double H=0.05;
	int height=250, lenght=75, start=500;
	double matfisk=1.0891,rovfisk=0.8911;
	double xled=0;
		
	public Window(String text)
	{		
		super(text);
		con = getContentPane();
		setJMenuBar(create_menubar());
		
		c = new Canvas();
		c.setBackground(new Color(255,255,255));
		con.add(c);
		g = c.getGraphics();
		
		addWindowListener(new WListen());
		setVisible(true);
	}
	
	public JMenuBar create_menubar()
	{
		bar = new JMenuBar();
		
		arkiv = new JMenu("Arkiv");
		arkiv.setMnemonic('A');
		
		item_arkiv = new JMenuItem("Rita graf"); 
		item_arkiv.setAccelerator(KeyStroke.getKeyStroke("F2"));
		item_arkiv.addActionListener(this);
		arkiv.add(item_arkiv);
		
		item_arkiv = new JMenuItem("Rita axlar"); 
		item_arkiv.setAccelerator(KeyStroke.getKeyStroke("F3"));
		item_arkiv.addActionListener(this);
		arkiv.add(item_arkiv);
		
		item_arkiv = new JMenuItem("Avsluta");
		item_arkiv.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.ALT_MASK, false));
		item_arkiv.addActionListener(this);
		arkiv.add(item_arkiv);
		
		bar.add(arkiv);
						
		return bar;
	}
	
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource() instanceof JMenuItem)
		{
			JMenuItem item = (JMenuItem)e.getSource();
			String txt = item.getActionCommand();
			if(txt.equals("Rita graf"))
			{
				berakna();
				rita_graf();
			}
			else if(txt.equals("Rita axlar"))
			{
				rita_axlar();
			}
			else if(txt.equals("Avsluta"))
			{
				System.exit(0);
			}
		}
	}
	
	public void berakna()
	{
		matfisk = 1.0891;
		rovfisk = 0.8911;
		xled = 0;
		
		for (int i=0;i<20;i++)
		{
			 matfisk += H/2*(X(matfisk,rovfisk,0)+X(matfisk+H,rovfisk+H,0));
			 rovfisk += H/2*(Y(matfisk,rovfisk,0)+Y(matfisk+H,rovfisk+H,0));
			 xled += H;
			 
			 matfiskar[i] = (int)(start-(matfisk*height));
			 rovfiskar[i] = (int)(start-(rovfisk*height));
			 xArray[i] = (int)(xled*lenght); 
		}
		for (int i=20;i<200;i++)
		{
			 matfisk += H/2*(X(matfisk,rovfisk,1)+X(matfisk+H,rovfisk+H,1));
			 rovfisk += H/2*(Y(matfisk,rovfisk,1)+Y(matfisk+H,rovfisk+H,1));
			 xled += H;
			 
			 matfiskar[i] = (int)(start-(matfisk*height));
			 rovfiskar[i] = (int)(start-(rovfisk*height));
			 xArray[i] = (int)(xled*lenght);
		}
	}
	
	public void rita_graf()
	{
		g.setColor(mat_color);
		g.drawPolyline(xArray,matfiskar,200);
			
		g.setColor(rov_color);
		g.drawPolyline(xArray,rovfiskar,200);
		
	}
	
	public void rita_axlar()
	{		
		g.setColor(mat_color);
		g.drawString("Matfiskar", 0, 25);
		
		g.setColor(rov_color);
		g.drawString("Rovfiskar", 0, 50);
	}
	
	public void clear_arrays()
	{
		for(int i=0;i<200;i++)
		{
			matfiskar[i] = 0;
			rovfiskar[i] = 0;
			xArray[i] = 0;
		}	
	}
	
	public double X(double mat,double rov,int fiske)
	{
		return ((10*mat)-(10*mat*rov)-(mat*mat)-(mat*fiske));
	}
	public double Y(double matf, double rovf,int fiske)
	{
		return (-(10*rovf)+(10*matf*rovf)-(rovf*rovf)-(fiske*rovf));
	}
}

class WListen extends WindowAdapter
{
	public void windowClosing(WindowEvent ev) {System.exit(0);}	
}