Programowanie urządzeń mobilnych Podstawy tworzenia aplikacji z
Transkrypt
Programowanie urządzeń mobilnych Podstawy tworzenia aplikacji z
Programowanie urządzeń mobilnych Podst a wy t wo rzen ia a pl ik acj i Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2 Wykorzystanie plików graficznych w MIDlet’ach • • • utworzenie obiektu klasy Image (statyczna metoda createImage()) utworzenie obiektu klasy ImageItem dodanie utworzonego obiektu do formularza (lub innego obiektu) Jedna z wersji metody createImage() tworzy obiekt z pliku graficznego (obsługiwany format graficzny to PNG). Podajemy ścieżkę do pliku znajdującego się w katalogu res (ang. resources - zasoby). Przykładowa aplikacja wykorzystywany plik: taurus.png znajdujący się w katalogu res import javax.microedition.lcdui.*; import javax.microedition.midlet.MIDlet; import java.io.*; /** * MIDlet: Wyświetlanie grafiki * Klasy główne: Form (dziedzicząca z klasy Screen) * Klasy dodatkowe: Image oraz ImageItem (dziedzicząca z klasy Item) */ public class WyswietlanieGrafiki extends MIDlet implements CommandListener { // wykorzystanie klasy Form (formularz) private Form frm; // wykorzystanie klasy Command (obsługa poleceń) private Command exitCommand; // wykorzystanie klasy Display private Display dp; // dodatkowe pola związane z formularzem private ImageItem img; private Image image; // konstruktor tworzacy główny ekran public WyswietlanieGrafiki () { frm = new Form("Wyświetlanie grafiki"); try { // Tworzymy "Obraz" / oznacza ścieżkę do katalogu res image = Image.createImage("/taurus.png"); } catch (IOException e) { System.out.println ("Nie można załadować obrazka!"); } // tworzymy obiekt klasy ImageItem, ktry mozemy dodać do formularza 1 Programowanie urządzeń mobilnych Podst a wy t wo rzen ia a pl ik acj i img = new ImageItem(null, image, ImageItem.LAYOUT_CENTER, "Obrazek przedstawiający byka"); frm.append(img); // tworzymy nowe polecenie exitCommand = new Command("Zakończ", Command.EXIT, 0); // dodajemy polecenia do formularza frm.addCommand(exitCommand); // wskazujemy obiekt obslugujacy zdarzenia frm.setCommandListener(this); } public void startApp() { // ustawiamy ekran poczatkowy dp = Display.getDisplay(this); dp.setCurrent(frm); } 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(); } } } 2 Programowanie urządzeń mobilnych Podst a wy t wo rzen ia a pl ik acj i Obsługa menu Aplikacje posiadające wiele opcji powinny mieć możliwość umieszczenia ich w menu. W MIDlet’ach opcje tworzone są za pomocą nowych obiektów klasy Command. Ich umieszczenie uzależnione jest od typu, priorytetu oraz możliwości urządzenia. Przykładowa aplikacja import javax.microedition.lcdui.*; import javax.microedition.midlet.MIDlet; /** * MIDlet: TworzenieMenu * Klasy główne: TextBox (dziedzicząca z klasy Screen) */ public class TworzenieMenu extends MIDlet implements CommandListener { // wykorzystanie klasy TextBox private TextBox tb; // wykorzystanie klasy Command (obsługa poleceń) private Command exitCommand, pisowniaCommand, wyslijSMSCommand, wyslijMMSCommnad, wyslijBTCommnad, wyczyscCommand, zapiszCommand ; // wykorzystanie klasy Display private Display dp; public TworzenieMenu () { // tworzymy obiekt klasy TextBox tb = new TextBox("Wprowadzanie tekstu", "", 320, TextField.ANY); // tworzymy nowe polecenia exitCommand = new Command("Zakończ", Command.EXIT, 0); pisowniaCommand = new Command("Sprawdź pisownię", Command.SCREEN, 1); wyslijSMSCommand = new Command("Wyślij SMS'em", Command.SCREEN, 1); wyslijMMSCommnad = new Command("Wyślij MMS'em", Command.SCREEN, 1); wyslijBTCommnad = new Command("Wyślij przez BT", Command.SCREEN, 1); wyczyscCommand = new Command("Wyczyść", Command.SCREEN, 1); zapiszCommand = new Command("Zapisz", Command.SCREEN, 1); // dodajemy polecenia do pola tekstowego tb.addCommand(exitCommand); tb.addCommand(pisowniaCommand); tb.addCommand(wyslijSMSCommand); tb.addCommand(wyslijMMSCommnad); tb.addCommand(wyslijBTCommnad); tb.addCommand(wyczyscCommand); tb.addCommand(zapiszCommand); // wskazujemy obiekt obslugujacy zdarzenia tb.setCommandListener(this); } 3 Programowanie urządzeń mobilnych Podst a wy t wo rzen ia a pl ik acj i public void startApp() { // ustawiamy ekran poczatkowy dp = Display.getDisplay(this); dp.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(); } // obsluga pozostałych poleceń // ............ } } Wykorzystanie GUI niskiego poziomu – klasa Canvas Klasa Canvas jest klasą reprezentującą ekran urządzenia mobilnego. Wykorzystanie bezpośredniego dostępu do ekranu polega na utworzeniu klasy dziedziczącej z klasy Canvas. Przesłonięcie odpowiednich metod pozwala na obsługę większości zdarzeń związanych z ekranem. Metodą, którą zawsze musimy przesłonić jest metoda paint() (wywoływana gdy urządzenie potrzebuje zaktualizować dane na ekranie). Parametrem metody jest referencja do obiektu klasy Graphics reprezentującego ekran urządzenia. Większość metod związanych z obsługą ekranu dostępna jest w klasie Graphics (rysowanie figur, zmiana koloru, wyświetlanie tekstu itp.). Parametry fizyczne ekranu urządzenia mobilnego uzyskamy za pomocą metod klasy Canvas (np. getWidth(), getHeight()) oraz metod klasy Display (np. isColor()). Przykładowa aplikacja import javax.microedition.midlet.MIDlet; import javax.microedition.lcdui.*; // klasa dziedzicząca z klasy Canvas (musimy przesłonić przynajmniej metodę paint()) class Ekran extends Canvas { public void paint(Graphics g) { // pobieramy rozmiary ekranu int szer = getWidth(); int wys = getHeight(); // czyścimy ekran na biało g.setColor(0x00ffffff); g.fillRect(0, 0, szer - 1 , wys - 1); 4 Programowanie urządzeń mobilnych Podst a wy t wo rzen ia a pl ik acj i // rysujemy czerwony prostokąt g.setColor(0x00ff0000); g.drawRect(szer / 10, wys / 10, szer / 5, wys / 5); // rysujemy zieloną linię g.setColor(0x0000ff00); g.drawLine(10, 10, 70, 70); // piszemy niebieski tekst g.setColor(0x000000ff); g.drawString("Piszemy po ekranie...", 10, 90, Graphics.TOP | Graphics.LEFT); } } public class ObslugaEkranu extends MIDlet implements CommandListener { // pola private private private klasy (jedno z pól jest referencją do obiektu klasy Ekran) Ekran ekr; Command exitCommand; Display dp; // konstruktor public ObslugaEkranu () { ekr = new Ekran(); exitCommand = new Command("Zakończ", Command.EXIT, 0); ekr.addCommand(exitCommand); ekr.setCommandListener(this); } public void startApp() { dp = Display.getDisplay(this); dp.setCurrent(ekr); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { // obsluga polecenia exitCommand (kończymy działanie aplikacji) if (c == exitCommand) { destroyApp(true); notifyDestroyed(); } } } 5 Programowanie urządzeń mobilnych Podst a wy t wo rzen ia a pl ik acj i Zadania 1. Napisz MIDlet wyświetlający ekran powitalny będący jego nazwą/logiem (plik graficzny). Ekran ten powinien po chwili zniknąć. Wykorzystaj poznane klasy (np. klasę Alert lub Form) oraz dowolny plik graficzny w formacie PNG. Sam MIDlet może być, którymś z poznanych na poprzednich ćwiczeniach (formularze, wyświetlanie tekstu itd.) 2. Korzystając z przykładowego kodu MIDlet’u z wieloma opcjami zmień ich kolejność w menu (priorytet polecenia), a następnie utwórz aplikację pobierającą od użytkownika dwie liczby i wykonującą określoną operację na nich (dodawanie, odejmowanie, dzielenie, mnożenie itp.). Wykorzystaj rozbudowane menu. 3. Zaprojektuj MIDlet wyświetlający na ekranie tabliczkę mnożenia 10x10. Wykorzystaj klasę Canvas oraz parametry urządzenia mobilnego do prawidłowego rozmieszczenia wszystkich elementów. 6