import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

class Temperature extends JFrame {

    JTextField far;
    JTextField celsius;
    FarText farListener;
    CelsiusText celListener;

    public Temperature() {

      // operation de fermeture
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      // extraire les dimensions
	Toolkit kit=Toolkit.getDefaultToolkit();
	Dimension screenSize = kit.getScreenSize();

      // centrer l'image
	setLocation(screenSize.width/4,screenSize.height/4);
    
      // ajout 2 champs textes
	far = new JTextField(5);
	far.setHorizontalAlignment(JTextField.RIGHT);
	celsius = new JTextField(5);
	celsius.setHorizontalAlignment(JTextField.RIGHT);
	farListener = new FarText();	
	celListener = new CelsiusText();

	far.getDocument().addDocumentListener(farListener);
	celsius.getDocument().addDocumentListener(celListener);

	GridLayout grid = new GridLayout(2,2);
	setLayout(grid);
	add(new JLabel("Fahrenheit"));
	add(far);
	add(new JLabel("Celsius"));
	add(celsius);

      // rend visible le cadre
	pack();
	setResizable(false);
	setVisible(true);
    }

    class FarText implements DocumentListener {

	private void miseAJour() {
	    try {
		int n = Integer.parseInt(far.getText().trim());
		int res = (n-32)*5/9;
		celsius.getDocument().removeDocumentListener(celListener);
		celsius.setText(res+"");
		celsius.getDocument().addDocumentListener(celListener);
	    }	    
	    catch (Exception ef) {}
	}

	public void changedUpdate(DocumentEvent e) {
	}

	public void insertUpdate(DocumentEvent e) {
	    miseAJour();
	}

	public void removeUpdate(DocumentEvent e) {
	    miseAJour();
	}
    }

    class CelsiusText implements DocumentListener {

	private void miseAjour() {
	    try {
		int n = Integer.parseInt(celsius.getText().trim());
		int res = n*9/5+32;
		far.getDocument().removeDocumentListener(farListener);
		far.setText(res+"");
		far.getDocument().addDocumentListener(farListener);
	    }
	    catch (Exception ef) {}
	}

	public void changedUpdate(DocumentEvent e) {
	}

	public void insertUpdate(DocumentEvent e) {
	    miseAjour();
	}

	public void removeUpdate(DocumentEvent e) {
	    miseAjour();
	}
    }


  public static void main(String[] args){
    Temperature cadre = new Temperature();
  }

}
