Ćw.1
Transkrypt
Ćw.1
Java ME Platform SDK 3.3 – IDE NetBeans 7.3.1
Zajęcia 1
WSTE
INSTRUKCJA DO ĆWICZENIA 1
PIERWSZA APLIKACJA W JAVIE NA TELEFON KOMÓRKOWY
INTERFEJS WYSOKIEGO POZIOMU KLASY SCREEN
I
1.
2.
3.
4.
5.
6.
7.
8.
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 JME-Pierwszy. Określ położenie projektu Project Location:
przyciskiem Browse… wybierając folder Z:\
Koniecznie usuń zaznaczenie opcji Create Default Package and Main Executable Class (patrz poniżej.
Naciśnij przycisk Next >.
W trzecim kroku tworzenia nowego projektu w nowym oknie New Mobile Application, wybierz w okienku dialogowym
Emulator Platform: Oracle Java™ Platform Micro Edition SDK 3.3, następnie sprawdź, czy ustawienia: typ urządzenia,
konfiguracji i profili są zgodne z tym pokazanym na rysunku wyżej (JavaMEPhone1, CLDC-1.1, MIDP-2.1) jeśli tak, naciśnij
przycisk Finish.
W okienku Projects kliknij nazwę projektu JME-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 okienku Projects kliknij dwukrotnie nazwę midletu MidletKlasyScreen, w oknie edytora kodu zostanie otwarty do edycji plik
MidletKlasyScreen.java.
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) {
}
}
Uzasadnienie - 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 wywołana w chwili, gdy ktoś dzwoni i telefon musi zająć się obsługą rozmowy.
2.
Za deklaracją klasy głównej MIDletKlasyScreen a przed metodą startApp() wygeneruj automatycznie konstruktora
klasy. W tym celu należy wykonać następujące czynności:
◊
Ustaw kursor myszy w wierszu 12.
◊
Kliknij prawym przyciskiem myszy w pustym 12
wierszu i z menu podręcznego wybierz opcję
Insert Code… Następnie w oknie Generate
kliknij
opcję
Constructor…,
zostanie
automatycznie wygenerowany kod konstruktora
klasy MIDletKlasyScreen
public MIDletKlasyScreen() {
}
Materiały do użytku wewnętrznego. Opracował Zbigniew JANIK.
1
Java ME Platform SDK 3.3 – IDE NetBeans 7.3.1
III
Zajęcia 1
WSTE
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");
Z uwagi, iż używamy nazwy klasy Form po raz pierwszy, musimy zaimportować odpowiednią bibliotekę do naszego MIDletu
następująco; wystarczy kliknąć prawym przyciskiem myszy wewnątrz okna edytora kodu i wybrać z menu podręcznego opcję
Fix Imports, automatycznie zostanie dodana na górze programu w odpowiednim miejscu instrukcja
import javax.microedition.lcdui.Form;
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 w tzw. publicznej części klasy) następująco:
Display display;
Czy pamiętałeś o Fix Imports ?
3. Teraz musimy przechować referencję do tego obiektu poprzez wywołanie metody getDisplay(). W tym przypadku najlepiej
wpisać taką instrukcję w metodzie startApp(), ponieważ ta metoda zostanie wykonana automatycznie zaraz po uruchomieniu
midletu.
display = Display.getDisplay(this);
4. 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ą!");
5. Uruchom aplikację naciskając klawisz <F6>. Kursor myszy powinien być umieszczony w oknie edytora kodu. Powinien pojawić
się ekran pokazany poniżej:
6. Zamknij emulator przyciskiem znajdującym się w prawym górnym narożniku okna.
7. Przyczyną takiego stanu rzeczy jest brak ustalenia, jaki ekran (obiekt) ma być wyświetlany na display (ekranie telefonu).
W tym przypadku należy wpisać instrukcję w metodzie startApp(), która określi że, aktualnie wyświetlanym obiektem ma
być ekran o nazwie formatka.
display.setCurrent(formatka);
8. 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ń istniejący nagłówek klasy MIDletKlasyScreen do
postaci
public class MIDletKlasyScreen extends MIDlet implements CommandListener{
2.
Z uwagi, iż używamy nazwy klasy CommandLstener, musimy zaimportować odpowiednią bibliotekę do naszego MIDletu
następująco; wystarczy kliknąć prawym przyciskiem myszy wewnątrz okna edytora kodu i wybrać z menu podręcznego opcję
Fix Imports, automatycznie zostanie dodana w odpowiednim miejscu instrukcja
import javax.microedition.lcdui.CommandListener;
3.
Określenie obiektu słuchacza zdarzeń, który implementuje interfejs CommandListener wymaga także zdefiniowania metody
commandAction(); którą w naszym przypadku umieścimy za metodą destroyApp().
I w tym przypadku wygenerujemy ją automatycznie, następująco:
◊
Wstaw pusty wiersz za metodą destroyApp
Materiały do użytku wewnętrznego. Opracował Zbigniew JANIK.
2
Java ME Platform SDK 3.3 – IDE NetBeans 7.3.1
Zajęcia 1
◊
Kliknij prawym przyciskiem myszy w tym
pustym wierszu i z menu podręcznego wybierz
opcję Insert Code… Następnie w oknie
Generate kliknij opcję Implement Metod…
zostanie wyświetlone okno dialogowe
Generate Implement Methods, w którym
należy
zaznaczyć
opcję
dla
węzła
CommandListener, a następnie kliknąć
przycisk Generate.
◊
Automatycznie zostanie wygenerowany kod metody commandAction, w której należy usunąć w całości instrukcję
WSTE
throw new UnsupportedOperationException("Not supported yet."); //To change body of…
◊
Ten fragment kodu programu powinien wyglądać następująco:
public void commandAction(Command cmnd, Displayable dsplbl) {
}
4.
Dodawanie polecenia ZAMKNIJ (zakończenie działania aplikacji) do MIDletu.
Dodaj poniższą instrukcję przed konstruktorem klasy MIDletKlasyScreen
Command wyjscie = new Command("ZAMKNIJ", Command.EXIT,1);
5.
Wewnątrz konstruktora klasy MIDletKlasyScreen dopisz instrukcje dodające komendę
// dodaj komendę
formatka.addCommand(wyjscie);
6.
Włącz nasłuchiwanie zdarzeń z ekranu dopisując poniższą instrukcję w metodzie startApp():
7.
W metodzie commandAction() możemy rozpoznać wywołaną komendę i aktywny ekran
Displayable i odpowiednio na nią zareagować.
formatka.setCommandListener(this);
public void commandAction(Command cmnd, Displayable dsplbl) {
if (cmnd == wyjscie) {
destroyApp(true);
notifyDestroyed();
}
}
8.
Uruchom aplikację <F6> lub przyciskiem .
9.
Sprawdź działanie polecenia ZAMKNIJ.
Materiały do użytku wewnętrznego. Opracował Zbigniew JANIK.
3
Java ME Platform SDK 3.3 – IDE NetBeans 7.3.1
Zajęcia 1
WSTE
DRUGA APLIKACJA W JAVIE NA TELEFON KOMÓRKOWY
INTERFEJS NISKIEGO POZIOMU KLASY CANVAS
V
Tworzenie drugiego MIDletu przy pomocy środowiska NetBeans.
1.
Otwórz nowy projekt typu Mobile Application o nazwie JME-Drugi na dysku Z:\ Nadaj nazwie MIDletu nazwę
MidletKlasyCanvas. Czynności wykonaj zgodnie z niniejszą instrukcją począwszy od pkt. I.1 do pkt. II.1 włącznie.
VI
Podstawowy szkielet MIDetu – projektowanie wyglądu interfejsu niskiego poziomu
1.
Wygeneruj automatycznie konstruktora klasy MIDletKlasyCanvas (patrz pkt: II.2).
2.
Zbudujmy wewnętrzną klasę EkranG rozszerzającą klasę Canvas, zaraz na końcu klasy MIDletKlasyCanvas. Zatem
umieść dokładnie w tym samym miejscu poniższy kod wyróżniony szarym tłem:
import javax.microedition.midlet.*;
Publiczna część klasy
MIDletKlasyCanvas
public class MIDletKlasyCanvas extends MIDlet {
public
}
public
public
public
MIDletKlasyCanvas() {
Konstruktor klasy MIDletKlasyCanvas
void startApp() { }
void pauseApp() { }
void destroyApp(boolean unconditional) { }
Publiczna część klasy EkranG
private class EkranG extends Canvas {
Konstruktor klasy EkranG
public EkranG(String txtlab){
}
protected void paint(Graphics g){
}
}
}
3.
4.
Pamiętaj o dodaniu odpowiednich bibliotek (Fix Imports)
Dokonaj przeformatowania kodu programu <Alt+Shift+F>. (lub kliknij prawym przyciskiem wewnątrz edytora kodu i wybierz
opcję Format.)
W publicznej części klasy EkranG umieść deklaracje trzech zmiennych:
String etykieta = "Tekst domyślny";
int szerokośćEkranu, wysokośćEkranu;
5.
W konstruktorze klasy EkranG umieść poniższą instrukcję:
6.
Na początku metody paint() wpisz instrukcje:
//tekst do wypisania na ekranie
//szerokość i wysokość ekranu
etykieta = txtlab;
//Pobieram wysokość i szerokość dostępnego ekranu
szerokośćEkranu = getWidth();
wysokośćEkranu = getHeight();
7.
Wygląd naszego ekranu zdefiniujemy w metodzie paint(), zatem uzupełnij jej treść następująco:
//Malowanie tła
g.setColor(255, 255, 0);//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, Graphics.TOP | Graphics.LEFT);
//Wyświetlenie współrzędnych prawego dolnego narożnika ekranu
g.drawString("(" + szerokośćEkranu + "," + wysokośćEkranu +
")", szerokośćEkranu, wysokośćEkranu, Graphics.BOTTOM | Graphics.RIGHT);
//Tekst na środku ekranu
g.setColor(0,0,255);
g.drawString(etykieta, szerokośćEkranu / 2, wysokośćEkranu / 2,
Graphics.BASELINE | Graphics.HCENTER);
Zbudowaliśmy klasę wewnętrzną EkranG dziedziczącą z Canvas.
8.
9.
Aby zobaczyć efekty naszej pracy, musimy stworzyć logiczną reprezentację ekranu. Wykonaj tą czynność samodzielnie (patrz.
pkt.III.2 i III.3).
W publicznej części klasy MIDletKlasyCanvas zadeklaruj zmienną, która będzie wskazywać na obiekty klasy EkranG
następująco:
EkranG ekranG;
Natomiast w konstruktorze tej klasy dopisz instrukcję (konstruktor powinien zostać utworzony po wykonaniu pkt. II.2).
ekranG = new EkranG("JME i Canvas rządzi");
Materiały do użytku wewnętrznego. Opracował Zbigniew JANIK.
4
Java ME Platform SDK 3.3 – IDE NetBeans 7.3.1
Zajęcia 1
WSTE
10. Uzupełnij treść metody startApp() następująco:
display.setCurrent(ekranG);
11. Uruchom program <F6>.
12. 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 Wyświetlanie plików graficznych na płótnie (Canvas)
1. Zadeklaruj dwie zmienne typu Image o nazwach rysunek1, rysunek2 w publicznej części klasy
MidletKlasyCanvas.
2. Na końcu konstruktora klasy MidletKlasyCanvas dopisz instrukcje określające adres do plików
graficznych piesek.jpg oraz ptaszek.jpg
try {
rysunek1 = Image.createImage("/piesek.jpg");
rysunek2 = Image.createImage("/ptaszek.jpg");
} catch (Exception e) {
System.out.println("Brak obrazka:"+e);
}
Przekopiuj z dysku sieciowego wskazanego przez prowadzącego pliki graficzne piesek.jpg oraz
ptaszek.jpg do katalogu Z:\JME-Drugi\src naszego projektu
3. Aby zobrazować pliki graficzne na płótnie należy użyć metody drawImage(), która działa podobnie
jak metoda drawString, a wiec dopisz w metodzie paint() poniższe instrukcje (umieść je za
instrukcją malującą tło płótna):
g.drawImage(rysunek1, 0, 0, Graphics.TOP | Graphics.LEFT);
g.drawImage(rysunek2, szerokośćEkranu-5, wysokośćEkranu - 25, Graphics.BOTTOM | Graphics.RIGHT);
4. Uruchom MIDlet.
5. 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).
VIII Zadanie do samodzielnego rozwiązania na zajęciach lab.
1. Utwórz nowy projekt typu Mobile Application o nazwie Trzeci na dysku Z:\ 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, na ¼ wysokości ekranu umieść swoje nazwisko i imię wyświetlone kolorem
niebieskim wyśrodkowane w poziomie.
5. Zamknięcie aplikacji powinno nastąpić po wybraniu opcji z napisem WYJŚCIE.
Uwaga:
Aby uzyskać odpowiedni kolor, należy określić 3 parametry R, G, B w metodzie setColor()
Należy uruchomić program Paint i z menu Kolory wybrać:
g.setColor(R, G, B);
Materiały do użytku wewnętrznego. Opracował Zbigniew JANIK.
5