# Java: Example - InchesToCm

The following program converts feet and inches to centimeters (there are 2.54 centimeters per inch).

### Main source

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
    // InchesToCm.java -- converts feet and inches to centimeters

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;

    ////////////////////////////////////////////////////////////////// InchesToCm
    /** InchesToCm contains main program to convert feet an inches
     *  to centimeters.
     * @author Fred Swartz
     * @version 2004-04-25
     */
    class InchesToCm {
        /** Create window containing InchesToCmGUI panel. */
        public static void main(String[] args) {
            JFrame win = new JFrame();
            win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            win.setTitle("Inches To Centimeters");
            win.setContentPane(new InchesToCmGUI());
            win.pack();
            win.setVisible(true);
        }//end main
    }//endclass InchesToCm

### GUI as subclass of JPanel

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
    // InchesToCmGUI.java
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;

    /** Subclass JPanel to create GUI for ft+inches to cm conversion.*/
    class InchesToCmGUI extends JPanel {
        private JTextField _feetField        = new JTextField(4);
        private JTextField _inchesField      = new JTextField(4);
        private JTextField _centimetersField = new JTextField(5);

        //======================================================= constructor
        public InchesToCmGUI() {
            JButton equalsButton = new JButton("=");
            equalsButton.addActionListener(new ConvertListener());

            //-- Layout components
            this.setLayout(new FlowLayout());
            this.add(new JLabel("Feet"));
            this.add(_feetField);
            this.add(new JLabel("Inches"));
            this.add(_inchesField);
            this.add(equalsButton);
            this.add(new JLabel("Centimeters"));
            this.add(_centimetersField);
        }//end constructor

        ///////////////////////////////////////// innner class ConvertListener
        /** Listener class to convert ft+inches to cm. */
        class ConvertListener implements ActionListener {
           public void actionPerformed(ActionEvent e) {
               try {
                   double ftVal = Double.parseDouble(_feetField.getText());
                   double inVal = Double.parseDouble(_inchesField.getText());
                   _centimetersField.setText("" + (2.54 * (12*ftVal + inVal)));
               } catch (NumberFormatException ex) {
                   _centimetersField.setText("ERROR");
               }
           }
        }//end inner class

    }//endclass

## Exercises

1. Add a listener so that, if the user types Enter in either the feet or inches field, it does the same thing is done as when the button is clicked. Hint, if two (or more) components do the same thing, they can use the same listener!
2. Make the centimeter field uneditable.
3. Align the field contents to the right.
4. Format the output to 1 decimal place.