Instrukcja do Ćwiczenia 4 - NetBeans

Transkrypt

Instrukcja do Ćwiczenia 4 - NetBeans
Java ME – programowanie w IDE NetBeans
Zajęcia 4
WSM
INSTRUKCJA DO ĆWICZENIA 4
PIERWSZA APLIKACJA W JAVIE NA TELEFON KOMÓRKOWY
INTERFEJS WYSOKIEGO POZIOMU KLASY SCREEN
I
1.
2.
3.
4.
Tworzenie pierwszego MIDletu przy pomocy środowiska NetBeans.
Otwórz nowy projekt w środowisku NetBeans, wybierając z menu File opcję New Project… a następnie zaznacz w panelu
Categories: Java ME, w panelu Project: Mobile Application. Naciśnij przycisk Next >.
Projekt nazwij J2ME-Pierwszy. Określ połoŜenie projektu Project Location:
przyciskiem Browse… wybierając folder G:\
Koniecznie usuń zaznaczenie opcji Create Hello MIDlet (patrz poniŜej), a pozostaw zaznaczenie opcji Set as Main Project.
Naciśnij przycisk Next >.
5.
W trzecim kroku tworzenia nowego projektu w oknie New Project, wybierz w okienku dialogowym Emulator Platform: Sun
Java™ Wirless Toolkit 2.5.2 for CLDC, następnie sprawdź, czy ustawienia: typ urządzenia, konfiguracji i profili są zgodne z tym
pokazanym na rysunku wyŜej (DefaultColorPhone, CLDC-1.1, MIDP-2.1) jeśli tak, naciśnij przycisk Finish.
6.
W okienku Projects kliknij nazwę projektu J2ME-Pierwszy prawym przyciskiem myszy a następnie wybierz opcję New i dalej
w otwartym oknie dialogowym wybierz MIDlet….
Zmień nazwę MIDlet Name: na MIDletKlasyScreen. Naciśnij przycisk Finish. W oknie edytora kodu automatycznie zostanie
otwarty do edycji plik MIDletKlasyScreen.java.
7.
II
Podstawowy szkielet MIDetu – opis podstawowych wymagań
1. Nasz wygenerowany program powinien mieć następującą postać (pominięto komentarze):
import javax.microedition.midlet.*;
public class MIDletKlasyScreen extends MIDlet {
public void startApp() {
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
2. Za deklaracją klasy głównej MIDletKlasyScreen
konstruktora klasy:
a przed metodą startApp() wygeneruj automatycznie
public MIDletKlasyScreen() {
}
Deklaracja koniecznych metod
Dziedziczenie po klasie MIDlet zobowiązuje nas do zdefiniowania trzech metod, które w klasie MIDlet zostały oznaczone jako
abstrakcyjne. Metody abstrakcyjne nie zawierają Ŝadnej treści i zmuszają programistów tworzących klasy pochodne do
samodzielnego ich zdefiniowania.
Metody abstrakcyjne, o których mowa, to:
public void startApp()
public void pauseApp()
public void destroyApp(boolean unconditional)
Są one bezpośrednio związane ze stanem, w jakim znajduje się MIDlet.
W momencie uruchamiania aplikacji wywołana zostaje metoda startApp(). Jeśli chcemy zwolnić zaalokowane wcześniej
zasoby, moŜemy uŜyć metody destroyApp() przed zakończeniem działania aplikacji.
Metoda pauseApp() zostaje ona wywołana w chwili, gdy ktoś dzwoni i telefon musi zająć się obsługą rozmowy.
III
Projektowanie wyglądu interfejsu wysokiego poziomu
1. Przed konstruktorem wpisz instrukcję, która zadeklaruje istnienie ekranu klasy Form o nazwie formatka:
Form formatka = new Form("Pierwszy MIDlet");
2. Obiekt klasy Display jest logiczną reprezentacją ekranu telefonu komórkowego. KaŜdy MIDlet ma dedykowany dokładnie jeden
taki obiekt i naleŜy pozyskać referencję do niego poprzez wywołanie metody: getDisplay(). Aby to wykonać utwórzmy
obiekt typu Display o nazwie display (przed konstruktorem) następująco:
Display display;
Materiały do uŜytku wewnętrznego. Opracował Zbigniew JANIK.
1
Java ME – programowanie w IDE NetBeans
Zajęcia 4
WSM
Teraz musimy przechować referencję do tego obiektu poprzez wywołanie metody getDisplay(). W tym przypadku najlepiej
wpisać taką instrukcję w konstruktorze klasy, poniewaŜ ta metoda zostanie wykonana automatycznie jako pierwsza i tylko jeden
raz.
display = Display.getDisplay(this);
3. Wyświetlimy na naszym ekranie tekst Witamy społeczność akademicką! Najłatwiej tego dokonać wpisując na końcu
w konstruktorze głównej klasy instrukcję, która doda do ekranu o nazwie formatka tekst:
formatka.append("Witamy społeczność akademicką!");
4. Uruchom aplikację naciskając klawisz <F6>. Naciśnij przycisk opcji Launch. Dlaczego brak jest jakiejkolwiek reakcji na
wybranie opcji Launch. Zamknij emulator przyciskiem
znajdującym się w prawym górnym naroŜniku okna.
5. Przyczyną takiego stanu rzeczy jest brak ustalenia, jaki ekran ma być wyświetlany na display. W tym przypadku naleŜy
wpisać instrukcję w metodzie startApp(), która określi Ŝe, aktualnie wyświetlanym ekranem ma być ekran o nazwie
formatka.
display.setCurrent(formatka);
6. Uruchom aplikację.
IV
Zamknięcie aplikacji poleceniem Command
W programach pisanych na telefony komórkowe nie uświadczymy tradycyjnych przycisków (Button), ich funkcje doskonale spełniają
polecenia (Command). Na ekranie znajdują się one nad przyciskami opcji i to właśnie te przyciski wywołują polecenia. Po utworzeniu
odpowiedniego polecenia trzeba je jeszcze dodać do formatki.
Zmodyfikuj tak program, aby po wypisaniu tekstu na ekranie zamknięcie aplikacji nastąpiło po wybraniu opcji ZAMKNIJ
1.
Jeśli więc chcemy operować komendami (poleceniami) w naszej aplikacji, jedna z naszych klas musi implementować interfejs
CommandListener. Zatem dodaj do klasy MIDletKlasyScreen interfejs CommandListener, który pozwoli nam
operować komendami obsługujące przyciski opcji. W tym celu zmień nagłówek klasy MIDletKlasyScreen do postaci
public class MIDletKlasyScreen extends MIDlet implements CommandListener{
2.
Określenie obiektu słuchacza zdarzeń, który implementuje interfejs CommandListener wymaga zdefiniowania metody
commandAction(); którą w naszym przypadku umieścimy za metodą destroyApp()
public void commandAction(Command c, Displayable d) {
}
3.
Dodaj poniŜszą instrukcję przed konstruktorem klasy MIDletKlasyScreen
Command wyjscie = new Command("ZAMKNIJ", Command.EXIT,1);
4.
Wewnątrz konstruktora klasy MIDletKlasyScreen dopisz instrukcje dodające komendę oraz
włącz nasłuchiwanie zdarzeń z ekranu:
// dodaj komendę
formatka.addCommand(wyjscie);
formatka.setCommandListener(this);
5.
W metodzie commandAction () moŜemy rozpoznać wywołaną komendę i aktywny ekran
Displayable i odpowiednio na nią zareagować.
public void commandAction(Command c, Displayable d) {
if (c == wyjscie) {
destroyApp(true);
notifyDestroyed();
}
}
6.
Uruchom aplikację <F6>. Sprawdź działanie polecenia ZAMKNIJ.
DRUGA APLIKACJA W JAVIE NA TELEFON KOMÓRKOWY
INTERFEJS NISKIEGO POZIOMU KLASY CANVAS
V
1.
VI
1.
Tworzenie drugiego MIDletu przy pomocy środowiska NetBeans.
Otwórz nowy projekt typu Mobile Application o nazwie J2ME-Drugi na dysku G:\ Nadaj nazwie MIDletu nazwę
MIDletKlasyCanvas. Czynności wykonaj zgodnie z instrukcją (pkt.: I.1-7).
Podstawowy szkielet MIDetu – projektowanie wyglądu interfejsu niskiego poziomu
Zbudujmy wewnętrzną klasę EkranG rozszerzającą klasę Canvas, zaraz na początku części publicznej klasy
MIDletKlasyCanvas. Zatem umieść poniŜszy kod wyróŜniony szarym tłem (patrz następna strona):
import javax.microedition.midlet.*;
public class MIDletKlasyCanvas extends MIDlet {
Materiały do uŜytku wewnętrznego. Opracował Zbigniew JANIK.
2
Java ME – programowanie w IDE NetBeans
Zajęcia 4
WSM
private class EkranG extends Canvas {
public EkranG(String txtlab){
}
protected void paint(Graphics g){
}
}
public void startApp() { }
public void pauseApp() { }
public void destroyApp(boolean unconditional) { }
}
7. Dokonaj przeformatowania kodu programu <Alt+Shift+F>. (lub kliknij prawym przyciskiem wewnątrz edytora kodu i wybierz
opcję Format.)
8. Przed konstruktorem klasy EkranG umieść deklaracje trzech zmiennych:
String etykieta = "Tekst domyślny";//tekst do wypisania na ekranie
int szerokośćElipsy = 90;
//szerokość elipsy na środku ekranu
int szerokośćEkranu, wysokośćEkranu; //szerokość i wysokość ekranu
9. Wewnątrz konstruktora klasy EkranG umieść poniŜsze instrukcje:
etykieta = txtlab;
//Pobieram wysokość i szerokość dostępnego ekranu:
szerokośćEkranu = getWidth();
wysokośćEkranu = getHeight();
10. Wygląd naszego ekranu zdefiniujemy w metodzie paint(), zatem uzupełnij jej treść następująco:
//Malowanie tła
g.setColor(247, 223, 62);//zmiana aktualnego koloru
//Namalowanie wypełnionego aktualnym kolorem prostokąta
g.fillRect(0, 0, szerokośćEkranu, wysokośćEkranu);
//Wyświetlenie współrzędnych lewego górnego naroŜnika ekranu
g.setColor(0, 0, 0);
g.drawString("(0,0)", 0, 0, g.TOP | g.LEFT);
//Wyświetlenie współrzędnych prawego dolnego naroŜnika ekranu
g.drawString("(" + szerokośćEkranu + "," + wysokośćEkranu +
")", szerokośćEkranu, wysokośćEkranu, g.BOTTOM | g.RIGHT);
//Tekst na środku ekranu
g.setColor(0,0,255);
g.drawString(etykieta, szerokośćEkranu / 2, wysokośćEkranu / 2,
g.HCENTER | g.TOP);
//Wycinek elipsy
g.setColor(255, 0, 0);
g.fillArc(szerokośćEkranu/2-szerokośćElipsy/2, wysokośćEkranu/2-szerokośćElipsy/2,
szerokośćElipsy, szerokośćElipsy / 2, 20, 220);
Zbudowaliśmy klasę wewnętrzną EkranG dziedziczącą z Canvas.
11. Aby zobaczyć efekty naszej pracy, musimy stworzyć logiczną reprezentację ekranu. Wykonaj tą czynność samodzielnie (patrz.
pkt.III.2).
12. W publicznej części klasy MIDletKlasyCanvas zadeklaruj zmienną, która będzie wskazywać na obiekty klasy EkranG
EkranG ekranG;
następująco:
Natomiast w konstruktorze tej klasy dopisz instrukcję (konstruktor powinien zostać utworzony po wykonaniu pkt. VI.11).
ekranG = new EkranG("J2ME rządzi");
13. Uzupełnij treść metody startApp() następująco:
display.setCurrent(ekranG);
14. Uruchom program <F6>.
15. Zmodyfikuj samodzielnie tak program, aby zamknięcie aplikacji nastąpiło po wybraniu opcji
z napisem KONIEC. (Zastanów się gdzie umieścić odpowiednie instrukcje).
VII
Zadanie do samodzielnego rozwiązania
1. Utwórz nowy projekt typu Mobile Application o nazwie J2ME-Trzeci na dysku G:\ Nadaj nazwie
MIDletu nazwę Koperta.
2. Zbuduj aplikację, która narysuje na ekranie telefonu komórkowego kopertę o wymiarach 120x40
umieszczoną po środku ekranu.
3. Wypełnij tło ekranu oraz koperty dowolnym kolorem. Linie koperty wyrysuj kolorem czarnym.
4. PoniŜej koperty umieść swoje nazwisko i imię wyświetlone kolorem niebieskim.
5. Zamknięcie aplikacji powinno nastąpić po wybraniu opcji z napisem WYJŚCIE
Materiały do uŜytku wewnętrznego. Opracował Zbigniew JANIK.
3