z wykorzystaniem języka Java ME ćwiczenia 1 Budowa aplikacji MIDP utworzenie klasy dziedziczącej z klasy java.microedition.midlet.midlet Klasa musi posiadać przynajmniej trzy metody: startapp() inicjalizacja MIDlet u lub powrót ze stanu zatrzymania pauseapp() zatrzymanie aplikacji (np. podczas odbierania rozmowy) destroyapp() zamknięcie aplikacji Szkielet aplikacji public class PierwszyMIDlet extends MIDlet { public void startapp(){ public void pauseapp(){ public void destroyapp(boolean unconditional){ 1
Wyświetlanie informacji na ekranie import javax.microedition.lcdui.*; public class PierwszyMIDlet extends MIDlet { // wykorzystanie klasy TextBox (okno tekstowe) private TextBox tb; public void startapp() { // tworzymy obiekt klasy TextBox tb = new TextBox("Wyświetlanie tekstu", "Pisanie programów w Javie ME nie jest trudne", 160, TextField.UNEDITABLE); // ustawiamy ekran poczatkowy Display.getDisplay(this).setCurrent(tb); public void pauseapp() { public void destroyapp(boolean u) { Należy pamiętać o poprawnym wykorzystaniu utworzonych obiektów (sprawdzamy czy istnieje referencja lub tworzymy obiekty w konstruktorze MIDletu) // tworzymy obiekt klasy TextBox tylko gdy go jeszcze nie ma if (tb == null) { tb = new TextBox("Wyświetlanie tekstu", "Pisanie programów w Javie ME nie jest trudne", 160, TextField.UNEDITABLE); // tworzymy obiekt w konstruktorze MIDletu public PierwszyMIDlet() { tb = new TextBox("Wyświetlanie tekstu", "Pisanie programów w Javie ME nie jest trudne", 160, TextField.UNEDITABLE); Obsługa komend w MIDletach związana jest z implementacją interfejsu CommandListener public void commandaction(command c, Displayable d); 2
Przykładowa aplikacja z obsługą komend (zamykanie MIDletu) import javax.microedition.lcdui.*; /** * MIDlet: Wyswietlanie tekstu * Klasa główna: TextBox (dziedzicząca z klasy Screen) */ public class WyswietlanieTekstu extends MIDlet implements CommandListener { // wykorzystanie klasy TextBox (okno tekstowe) private TextBox tb; // wykorzystanie klasy Command (obsługa komend) private Command exitcommand; public void startapp() { // sprawdzamy czy istnieje instancja obiektu klasy TextBox if (tb == null) { // tworzymy obiekt klasy TextBox tb = new TextBox("Wyświetlanie tekstu", "Pisanie programów w Javie ME nie jest trudne", 160, TextField.UNEDITABLE); // tworzymy nowe polecenie exitcommand = new Command("Zakończ", Command.EXIT, 0); // dodajemy polecenie do pola tekstowego tb.addcommand(exitcommand); // wskazujemy obiekt obslugujacy zdarzenia tb.setcommandlistener(this); // ustawiamy ekran poczatkowy Display.getDisplay(this).setCurrent(tb); public void pauseapp() { public void destroyapp(boolean u) { // ciało metody z interfejsu CommandListener public void commandaction(command c, Displayable d) { // obsluga polecenia exitcommand (kończymy działanie aplikacji) if (c == exitcommand) { destroyapp(true); notifydestroyed(); 3
Klasy wykorzystywane przy tworzeniu graficznego interfejsu użytkownika (pakiet javax.microedition.lcdui) Komponenty GUI wysokiego poziomu Nazwa klasy Alert Opis Wyświetlanie przez pewien czas lub też do chwili akceptacji przez użytkownika okna dialogowego z komunikatem, obrazkiem. Wyświetlanie grupy elementów w formie formularza Form Element Opis ChoiceGroup Grupa wyboru z opcji DateField Edytowalne pole daty i czasu Gauge Wskaźnik ImageItem Obrazek z tekstem StringItem Nieedytowalny tekst TextField Pole tekstowe List TextBox Wybór z wielu opcji tekstowych lub graficznych Edytowalne pole tekstowe 4
Przykładowa aplikacja wykorzystująca klasę Alert import javax.microedition.lcdui.*; public class Alerty extends MIDlet implements CommandListener { private TextBox tb; private Command exitcommand, infocommand; private Display dp; public void startapp() { if (tb == null) { tb = new TextBox("Wprowadzanie danych", null, 160, TextField.ANY); // tworzymy nowe polecenia (polecenia związane z aplikacją // mają typ Command.SCREEN) exitcommand = new Command("Zakończ", Command.EXIT, 0); infocommand = new Command("Informacje", Command.SCREEN, 1); tb.addcommand(exitcommand); tb.addcommand(infocommand); tb.setcommandlistener(this); dp = Display.getDisplay(this); dp.setcurrent(tb); public void pauseapp() { public void destroyapp(boolean u) { public void commandaction(command c, Displayable d) { if (c == exitcommand) { destroyapp(true); notifydestroyed(); // obsluga polecenia infocommand (wyświetlenie informacji // użytkownikowi) if (c == infocommand) { // tworzymy obiekt klasy Alert wraz z odpowiednimi danymi Alert al = new Alert("Informacja", "Wprowadziłeś " + tb.getstring().length() + " znaków", null, AlertType.INFO); // ustawiamy czas (podany w ms) przez jaki Alert ma być // wyświetlany al.settimeout(2000); // wyświetlamy Alert oraz wskazujemy na ekran, który ma // zostać wyświetlony po zamknięciu Alerta dp.setcurrent(al, tb); 5
Wykorzystanie klasy Form oraz obsługi zdarzeń (aplikacja obliczająca kwotę brutto) import javax.microedition.lcdui.*; public class ProstyFormularz extends MIDlet implements CommandListener { // wykorzystanie klasy Form (formularz) private Form frm; private Command exitcommand, calccommand; private Display dp; // dodatkowe pola związane z formularzem private TextField netto; // konstruktor tworzacy formularz (jest to alternatywny sposob tworzenia obiektu // głównego) // w poprzednich przykładach obiekty te były tworzone w metodzie startapp() public ProstyFormularz () { frm = new Form("Obliczanie wartości brutto"); netto = new TextField("Podaj kwotę netto:", null, 20, TextField.DECIMAL); frm.append(netto); exitcommand = new Command("Zakończ", Command.EXIT, 0); calccommand = new Command("Oblicz", Command.SCREEN, 1); frm.addcommand(exitcommand); frm.addcommand(calccommand); frm.setcommandlistener(this); public void startapp() { // ustawiamy ekran poczatkowy dp = Display.getDisplay(this); dp.setcurrent(frm); public void pauseapp() { public void destroyapp(boolean u) { public void commandaction(command c, Displayable d) { if (c == exitcommand) { destroyapp(true); notifydestroyed(); // obsluga polecenia calccommand if (c == calccommand) { // obliczamy kwotę netto, brutto oraz VAT 6
double kwotanetto = Double.parseDouble(netto.getString()); double kwotabrutto = kwotanetto * 1.22; double kwotavat = kwotabrutto - kwotanetto; // formatowanie liczb (2 miejsca po przecinku) - w Javie ME brak klasy // DecimalFormat kwotanetto = (double)(int)((kwotanetto + 0.005) * 100.0) / 100.0; kwotabrutto = (double)(int)((kwotabrutto + 0.005) * 100.0) / 100.0; kwotavat = (double)(int)((kwotavat + 0.005) * 100.0) / 100.0; // tworzymy obiekt klasy Alert wraz z odpowiednimi danymi (kwoty) Alert al = new Alert("Wynik", "Kwota netto: " + kwotanetto + "\nkwota VAT: " + kwotavat + "\nkwota brutto: " + kwotabrutto, null, AlertType.CONFIRMATION); // ustawiamy Alert modalny al.settimeout(alert.forever); // wyświetlamy Alert oraz wskazujemy na ekran, który ma zostać // wyświetlony po zamknięciu Alerta dp.setcurrent(al, frm); 7
Zadania 1. Napisz MIDlet umożliwiający wprowadzanie danych (ogranicz ilość wprowadzanych znaków do 100). Wykorzystaj klasę TextBox. Zapoznaj się z możliwościami tej klasy oraz zmień typ wprowadzanych danych (np. tylko wartości liczbowe, hasło itp.). 2. Uzupełnij MIDlet z pierwszego zadania o nową komendę Test umożliwiającą wyświetlenie Alertu (wykorzystaj klasę Alert) zawierającego wpisany do tej pory tekst. 3. Korzystając z klasy Form oraz odpowiednich komponentów utwórz MIDlet pobierający od użytkownika imię oraz dzień i miesiąc urodzenia oraz wyświetlający po wybraniu opcji Podaj znak odpowiedni znak zodiaku (np. Kasia jest Bykiem). 4. Zmodyfikuj kod aplikacji ProstyFormularz tak, aby móc dokonywać przeliczenia dolarów USD na złotówki. Użytkownik podaje określoną liczbę dolarów, program przelicza ją na złotówki oraz wyświetla wynik na ekranie (możesz wykorzystać np klasę Alert). Ustal stały kurs wymiany. 5. Zapoznaj się z aplikacją FormularzWaluty. Dodaj nową walutę GBP oraz pole umożliwiające podanie ilości środków w danej walucie. Po podaniu wszystkich danych program ma wyświetlić aktualny kurs oraz przeliczoną na PLN wartość podanych środków. 8