Java Notes

Example - Generic Calc

GenericCalc window

This program converts miles into kilometers. It provides a basic plan for making a program that, when a button is pressed, takes input from a field, computes a new value based on that, and puts the result in another field. Extending this program is the basis for many other examples. To customize it:

  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 
 45 
 46 
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 
 55 
 56 
 57 
 58 
 59 
 60 
 61 
 62 
 63 
 64 
 65 
 66 
 67 
 68 
 69 
 70 
// File   : GUI/components/calculator/GenericCalc.java
// Purpose: Demo input field, button, output field.
// Author : Fred Swartz, 2006-12-25, Placed in public domain.

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

////////////////////////////////////////////////////// class GenericCalc
class GenericCalc extends JFrame {
    //======================================================== constants
    private static final double KILOMETERS_PER_MILE = 1.609344;
    
    //=============================================== instance variables
    private JTextField m_milesTf      = new JTextField(10);
    private JTextField m_kilometersTf = new JTextField(10);
    private JButton    m_convertBtn   = new JButton("Convert");
    
    //====================================================== method main
    public static void main(String[] args) {
        JFrame window = new GenericCalc();
    }

    //====================================================== constructor
    public GenericCalc() {
        //... Add a listener to the button
        m_convertBtn.addActionListener(new ConvertListener());

        //... Create content panel, set layout, add components
        JPanel content = new JPanel();
        content.setLayout(new FlowLayout());   // Use FlowLayout
        content.add(new JLabel("Miles"));      // Create and add label
        content.add(m_milesTf);                // Add input field
        content.add(m_convertBtn);             // Add button
        content.add(new JLabel("Kilometers")); // Create and add label
        content.add(m_kilometersTf);           // Add output field
        
        //... Set window characteristics
        setContentPane(content);
        pack();
        setLocationRelativeTo(null);
        setTitle("Miles to Kilometers");
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
    
    ///////////////////////////////////////// inner class ConvertListener
    class ConvertListener implements ActionListener {
        //=============================================== actionPerformed 
        public void actionPerformed(ActionEvent e) {
            String miles = m_milesTf.getText();        // Get input
            double mi = Double.parseDouble(miles);     // Str to double
            double km = convertMilesToKilometers(mi);  // Miles to kms
            m_kilometersTf.setText("" + km);           // Set output
        }
    }
    
    //========================================= convertMilesToKilometers
    // Performing the pure logic of the program (often called the model)
    //    is typically done in a separate class.  
    //    Here we only put it into a separate method.
    // You might think this is too trivial to put into a method.
    //    Perhaps in this case, but it is a very good habit to
    //    acquire because in "real" programs there will be 
    //    a big payoff in clarity.
    public double convertMilesToKilometers(double miles) {
        return miles * KILOMETERS_PER_MILE;
    }
}