TemperatureConverterJFace.java Source code

Java tutorial

Introduction

Here is the source code for TemperatureConverterJFace.java

Source

/******************************************************************************
 * Copyright (c) 1998, 2004 Jackwind Li Guojie
 * All right reserved. 
 * 
 * Created on Jan 16, 2004 8:05:36 PM by JACK
 * $Id$
 * 
 * visit: http://www.asprise.com/swt
 *****************************************************************************/

import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

public class TemperatureConverterJFace extends ApplicationWindow {

    Label fahrenheitLabel;
    Label celsiusLabel;

    Text fahrenheitValue;
    Text celsiusValue;

    public TemperatureConverterJFace() {
        super(null);

        addStatusLine();
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.window.Window#createContents(org.eclipse.swt.widgets.Composite)
     */
    protected Control createContents(Composite parent) {
        getShell().setText("JFace Temperature Converter");

        Composite converterComposite = new Composite(parent, SWT.NULL);

        converterComposite.setLayout(new GridLayout(4, false));

        fahrenheitLabel = new Label(converterComposite, SWT.NULL);
        fahrenheitLabel.setText("Fahrenheit: ");

        fahrenheitValue = new Text(converterComposite, SWT.SINGLE | SWT.BORDER);

        celsiusLabel = new Label(converterComposite, SWT.NULL);
        celsiusLabel.setText("Celsius: ");

        celsiusValue = new Text(converterComposite, SWT.SINGLE | SWT.BORDER);

        ModifyListener listener = new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                valueChanged((Text) e.widget);
            }
        };

        fahrenheitValue.addModifyListener(listener);
        celsiusValue.addModifyListener(listener);

        return converterComposite;
    }

    /**
     * Performs conversion when one of the text fields changes.
     * 
     * @param text
     *            the event source
     */
    public void valueChanged(Text text) {
        if (!text.isFocusControl())
            return;

        if (text == fahrenheitValue) {
            try {
                double fValue = Double.parseDouble(text.getText());
                double cValue = (fValue - 32) / 1.8;
                celsiusValue.setText(Double.toString(cValue));
                System.out.println("F -> C: " + cValue);
                setStatus("Conversion performed successfully.");
            } catch (NumberFormatException e) {
                celsiusValue.setText("");
                setStatus("Invalid number format: " + text.getText());
            }
        } else {
            try {
                double cValue = Double.parseDouble(text.getText());
                double fValue = cValue * 1.8 + 32;
                fahrenheitValue.setText(Double.toString(fValue));
                System.out.println("C -> F: " + fValue);
                setStatus("Conversion performed successfully.");
            } catch (NumberFormatException e) {
                fahrenheitValue.setText("");
                setStatus("Invalid number format: " + text.getText());
            }
        }
    }

    public static void main(String[] args) {
        TemperatureConverterJFace converter = new TemperatureConverterJFace();
        converter.setBlockOnOpen(true);
        converter.open();
        Display.getCurrent().dispose();
    }

}