import java.awt.* ;
import java.awt.event.* ;
import javax.swing.* ;

public class Converter  implements ActionListener
{
	private Double num1, num2 ;
	private JComboBox type, converted ;
	private JLabel temp, from, to, newTemp;
	private JButton convertButton, clearButton;
	private JTextField mainTemp, convertedTemp;
	private JPanel panel ;
	private JFrame frame ;
	private String []items ={"C","F","K"};


	public Converter()
	{
		frame = new JFrame("Temperature Converter");
		panel = new JPanel();
		panel.setLayout(null);

		//Define and declare components
		temp = new JLabel("Enter the Temperature");
		temp.setBounds(3,3,150,20);

		mainTemp = new JTextField();
		mainTemp.setBounds(3,25,150,20);

		from = new JLabel("Select temperature type");
		from.setBounds(3,48,150,20);

		type = new JComboBox(items);
		type.setBounds(3,71,150,20);

		to = new JLabel("Select converted type");
		to.setBounds(3,94,150,20);

		converted = new JComboBox(items);
		converted.setBounds(3,117,150,20);

		convertButton = new JButton("Convert");
		convertButton.setBounds(3,140,150,20);
		convertButton.addActionListener(this);

		clearButton = new JButton("Clear");
		clearButton.setBounds(155,25,70,20);
		clearButton.addActionListener(this);

		newTemp = new JLabel("The converted temperature is");
		newTemp.setBounds(3,163,170,20);

		convertedTemp = new JTextField();
		convertedTemp.setBounds(3,186,150,20);
		convertedTemp.setEditable(false);

		//Add component to panel
		panel.add(temp);
		panel.add(mainTemp);
		panel.add(from);
		panel.add(type);
		panel.add(to);
		panel.add(converted);
		panel.add(convertButton);
		panel.add(clearButton);
		panel.add(newTemp);
		panel.add(convertedTemp);

		//add panel and its components to frame
		frame.add(panel);
		frame.setBounds(100,100,300,250);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

	//override actionPerformed for handling button action
	public void actionPerformed(ActionEvent e)
	{
		if(e.getActionCommand().equals("Convert"))
		{
			try
			{
				num1 = Double.parseDouble(mainTemp.getText());
				if((type.getSelectedItem()).equals(converted.getSelectedItem()))
				{
					convertedTemp.setText(num1.toString()+  converted.getSelectedItem());
				}
				else
				{
					if(type.getSelectedItem().equals("C")&& converted.getSelectedItem().equals("F"))
					{
						num2 = convertCtoF(num1);
						convertedTemp.setText(num2.toString()+converted.getSelectedItem());
					}

					else
						if(type.getSelectedItem().equals("C")&& converted.getSelectedItem().equals("K"))
						{
							num2 = convertCtoK(num1);
							convertedTemp.setText(num2.toString()+converted.getSelectedItem());
						}

					else
						if(type.getSelectedItem().equals("F")&&converted.getSelectedItem().equals("C"))
						{
							num2 = convertFtoC(num1);
							convertedTemp.setText(num2.toString()+converted.getSelectedItem());
						}

					else
						if(type.getSelectedItem().equals("F")&&converted.getSelectedItem().equals("K"))
						{
							num2 = convertFtoK(num1);
							convertedTemp.setText(num2.toString()+converted.getSelectedItem());
						}

					else
						if(type.getSelectedItem().equals("K")&&converted.getSelectedItem().equals("C"))
						{
							num2 = convertKtoC(num1);
							convertedTemp.setText(num2.toString()+converted.getSelectedItem());
						}

					else
						if(type.getSelectedItem().equals("K")&&converted.getSelectedItem().equals("F"))
						{
							num2 = convertKtoF(num1);
							convertedTemp.setText(num2.toString()+converted.getSelectedItem());
						}
				}
			}
			catch(NumberFormatException nfe)
			{
				System.out.println(nfe.getMessage());
				//nfe.printStackTrace();
			}
		}

		if(e.getActionCommand().equals("Clear"))
		{
			reset();
		}

	}

	//converting from one type to another type
	//convert from celsius to fahrenheit
	private double convertCtoF(double c)
	{
		double f ;
		f = (c*9/5) + 32 ;
		return f ;
	}

	//convert from fahrenheit to celsius
	private double convertFtoC(double f)
	{
		double c ;
		c = 32 - (f*9/5);
		return c ;
	}

	//convert from celsius to kelvin
	private double convertCtoK(double c)
	{
		double k ;
		k = c + 273.15 ;
		return k ;
	}

	//convert from Kelvin to celsius
	private double convertKtoC(double k)
	{
		double c ;
		c = k - 273.15 ;
		return c ;
	}

	//convert from fahrenheit to kelvin
	private double convertFtoK(double f)
	{
		double k ;
		double x = convertFtoC(f);
		k = convertCtoK(x);
		return k ;
	}

	//convert from Kelvin to fahrenheit
	private double convertKtoF(double k)
	{
		double f ;
		double y = convertKtoC(k);
		f = convertCtoF(y);
		return f;
	}

	//resetting the application
	private void reset()
	{
		mainTemp.setText("");
		type.setSelectedIndex(0);
		converted.setSelectedIndex(0);
		convertedTemp.setText("");
	}
	//main method
	public static void main(String[]args)
	{
		new Converter();
	}
}