import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.*;

public class SoundJunkie extends JApplet implements ActionListener,MouseListener
{
	JTextField fb,vb,av,lv;
	JButton calcVolume,reset;
	JLabel fbLabel,vbLabel,avLabel,lvLabel;

	public void init()
	{

		setLayout(new GridLayout(5,2));

		fb=new JTextField("Put your desired Box Freq here");
		vb=new JTextField("Ideal Volume");
		av=new JTextField("Port Area in Square Inches");
		lv=new JTextField("Port Length desired");

		calcVolume=new JButton("Calculate Box Volume");
		reset=new JButton("Reset");

		fbLabel=new JLabel("Hz");
		vbLabel=new JLabel("Cub.In.");
		avLabel=new JLabel("Sq.In.");
		lvLabel=new JLabel("Inches");

		calcVolume.addActionListener(this);
		reset.addActionListener(this);
		fb.addMouseListener(this);
		lv.addMouseListener(this);
		av.addMouseListener(this);

		add(fb);
		add(fbLabel);
		add(av);
		add(avLabel);
		add(lv);
		add(lvLabel);
		add(calcVolume);
		add(reset);
		add(vb);
		add(vbLabel);
	}
	private String formula()//takes values in the three input fields and tries to output value of VB.
	{
		double vbv;
		try
		{
			vbv=((Double.parseDouble(av.getText())*4651704)/(Double.parseDouble(fb.getText())*Double.parseDouble(fb.getText())*((Double.parseDouble(lv.getText()))+0.823*Math.sqrt(Double.parseDouble(av.getText())))));
		}
		catch (NumberFormatException ex)
		{
			return "Sorry, but all inputs are not filled out or contain non number values";
		}
		return String.format("%.3",vbv);
	}
	public void actionPerformed(ActionEvent e)
	{
		if (e.getSource() == calcVolume)
		{
			vb.setText(formula());
		}

		else if(e.getSource()==reset)
		{
			fb.setText("Put your desired Box Freq here");
			av.setText("Port Area in Square Inches");
			lv.setText("Port Length desired");
			vb.setText("Ideal Volume");
		}
	}
	public void mouseClicked(MouseEvent m)
	{
		if(m.getSource()== fb)
		{
			fb.setText("");
		}
		else if(m.getSource()== av)
		{
			av.setText("");
		}
		else if(m.getSource()== lv)
		{
			lv.setText("");
		}
	}
	public void	mouseEntered(MouseEvent e){}
	public void	mouseExited(MouseEvent e){}
	public void	mousePressed(MouseEvent e){}
	public void	mouseReleased(MouseEvent e){}
}
