Currency converter using J2ME

The article Getting Started with J2ME showed how to build a simple Hello World application using J2ME. This article takes up from where the previous article left off and shows how to build a complete application, a currency converter, using the J2ME framework. The currency converter is a simple, yet complete application that converts from Indian Rupees (INR) to US Dollars (USD).

Background

In this article, we show how to create the user interface (GUI) elements of a MIDlet. MIDP 2.0 provides UI classes in the package javax.microedition.lcdui. This package has a class named Display. The Display class provides methods to retreive information about the display and to show/change the current GUI element that you want display. A MIDlet shows a Displayable UI element on a Display using the setCurrent(Displayable element) method of the Display class.

Alerts

Alerts are used to display information or error messages that stay on the screen for a short period of time and disappears. You can control several aspects of an alert by calling the relevant methods or using the right constructor.

Commands

A MIDlet interacts with a user through commands. A command is the equivalent of a button in a normal application, and can only be associated with a displayable GUI element. The Displayable class allows the user to attach a command to it by using the method addCommand(Command command). Displayable GUI element can have multiple commands associated with it.

Command Listener

The responsibility for acting on commands is performed by a class implementing the CommandListener interface, which has a single method commandAction(Command com, Displayable dis). However before command information can travel to a listener, the listener is registered with the method setCommandListener(CommandListener listener) from the Displayable class like Form, List and etc.

TextField

The TextField class is used to capture one line or multiple lines of text entered by the user. The number of lines of a text field depends on the maximum size of the text field when you create an instance of the TextField class.

Form

A Form is a collections of instances of the GUI elements like TextField, StringItem `and etc. `Form is a sub-class of Displayable.

GUI Elements can be added to the form by using the append(Item item) method, commands can be added using the addCommand(Command command) method. We can create more than one form in a application but only one form is displayed at a time, we also can set command Listener to a Form by using setCommandListener(CommandListener listener).

Source code

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class CurrencyMidlet extends MIDlet implements CommandListener {

    private Display display;
    private Form Input;
    private TextField inr;
    private Command convert;

    public CurrencyMidlet() {
        display = Display.getDisplay(this);
        Input = new Form("INR to USD Converter");
        inr = new TextField("Enter INR:", null, 10, TextField.DECIMAL);
        convert = new Command("Convert", Command.SCREEN, 1);
        Input.append(inr);
        Input.addCommand(convert);
        Input.setCommandListener(this);
    }

    public void startApp() {
        /* Display form */
        display.setCurrent(Input);
    }

    public void pauseApp() {
        /* pass */
    }

    public void destroyApp(boolean unconditional) {
        /* pass */
    }

    public void commandAction(Command c, Displayable d) {
        String text = null;
        long rs = 0;
        int  paise = 0;
        long dollor = 0;
        long cent = 0;
        String final_dollar = null;

        if (c == convert){
            text = inr.getString();
            paise = text.indexOf('.');
            if (paise == -1) {
                rs = Long.parseLong(text) * 100;
            } else {
                rs = Long.parseLong(text.substring(0, paise)) * 100;
                paise = Integer.parseInt(text.substring((paise+1), text.length()));
                rs = rs + paise;
            }

            dollor = rs * 100 / 4470;
            cent = dollor % 100;
            dollor = dollor / 100;
            final_dollar = String.valueOf(dollor) + "." + String.valueOf(cent);
            Alert alert = new Alert("US Dollor", final_dollar + "$", null, AlertType.INFO);
            alert.setTimeout(Alert.FOREVER);
            display.setCurrent(alert);
        }
    }
}

In the above Java file a Form object Input is created. In our application one TextFiled inr(Getting INR as input from the user ) and one Command convert are added to the Form Input. Then Input.setCommandListener(this) method will expect a command input from the command button.

The public CurrencyMidlet() is the constructor of the class CurrencyMidlet. All the initialisation is performed inside the constructor.

After the initialisation the startApp() method is invoked. This method displays the Input form by calling display.setCurrent(Input).

Now we should enter the INR value in the TextField inr and the press convert button. When we press convert button the command listener automatically calls the method commandAction(Command c, Displayable d).

The action to be taken after pressing the command button is defined inside the commandAction() method. When command button is pressed the corresponding USD value is displayed on the screen.

J2ME doesn’t support Floating point operation. So Fixed-point arithmetic is used.

Running the App

  • Shown below is the screenshot of the app. running in the emulator.

/static/images/currency.png
  • Install /static/code/Test.jar[CurrencyMidlet.jar] and /static/code/Test.jad[CurrencyMidlet.jad] in your mobile and run the app.