Bildkällor
Bilaga 2: Kod för LoggBokMidlet
/**
* LoggBokMidlet är en applikation som fungerar som en Loggbok.
* Midleten är skriven som ett examensarbete i pedagogik, för Malmö Högskola. * @author mathiasfredriksson * @version "%I%, %G%" * @since 1.0 */ /* * LoggbokMidlet.java *
* Created on den 30 augusti 2007, 12:08 */
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.util.*;
/**
* LoggBokMidlet är en applikation som fungerar som en Loggbok. * Börja med att välja kurs i aktivitetslistan,
* därefter skriver du i vilket datum du varit aktiv, */
public class LoggBokMidlet extends MIDlet { private Display disp;
private Alert tTimedAlert, val, savedAlert; private List lista, lista2;
private Command bekräftaVal, bakåtVal, okVal, okFormulär2, bakåtFormulär2, okLista2, bakåtLista2, avslutaVisa, nyttVisa, avslutaReflektion, nyttReflektion; private KommandoLyssnaren klyssn;
private DateField datumfält; private Form formulär, formulär2; private TextField rubrik, reflektion; private Gauge svarighet;
private TextBox visaAllt, elevReflektion; private String aktivitet, datum, tempstring; private Date dat;
private Calendar kal; int temp=0;
private Vector sparVektor;
/**
* Startar metoden LoggBokMidlet d.v.s. mobilapplikationen. */
public void startApp() { LoggBokMidlet(); } /** * Oanvänt pausekommando */
public void pauseApp() { }
/**
* Skrotar applikationen. */
public void destroyApp(boolean unconditional) { }
/**
* Kör igång programmet. Först konstrueras en alert, med texten Loggbok, * för att tala om vad programmet ska göras. Alerten visas under 2 sekunder. * Nu görs en lista där användaren kan välja kurser implicit.
* Sist kopplar jag handtaget till telefonen, och visar sakerna i displayen. */
public void LoggBokMidlet(){
try {
// Gör en bild
Image alertimage = Image.createImage("/loggbok2.png");
//Gör alerten, Lägger till text och bild
tTimedAlert = new Alert("Loggbok", "Loggbok version 1.1\n", alertimage , AlertType.INFO);
//Ställ visningstiden till 2 sekunder tTimedAlert.setTimeout(2000); }
//Om undantag sker: catch(Exception e) {
// skriv ut i outputen att bilden inte kan visas. System.out.println("Kan inte visa png-bilden."); }
//Gör en implict-lista att välja kurser från lista = new List("Kurs", Choice.IMPLICIT);
//Lägg valen i listan
lista.append("Fysik A", null);
lista.append("Digitalteknik A", null); lista.append("Digitalteknik B", null); lista.append("Styrteknik A", null); lista.append("Lokala Nätverk A", null); lista.append("Lokala Nätverk B", null); lista.append("IT-samordning", null); lista.append("Projektarbete", null);
//Gör ett kommando för att bekräfta val och lägg till det till listan. bekräftaVal = new Command("Bekräfta", Command.OK, 1); lista.addCommand(bekräftaVal);
//Gör en kommandolyssnare som lyssnar efter kommando i listan. klyssn = new KommandoLyssnaren();
lista.setCommandListener(klyssn);
// Laddar handtag och visar alerten. disp = Display.getDisplay(this);
disp.setCurrent(tTimedAlert, lista); }
/**
* Date(), konstruerar ett formulär med rubriken "Ange loggbokstillfällets datum" * Val av kommandona "Bakåt" och "Ok" finns också kopplade till
kommandolyssnaren.
* Dagens datum hämtas också via @see java.util.Date().
* Dagens datum finns sedan som default-val när datumfältet presenteras i displayen. *
*/
public void date(){
//Gör ett formulär för datum
formulär = new Form("Ange loggbokstillfällets datum");
//Gör kommando och lägg till på formuläret
bakåtVal = new Command("Bakåt", Command.BACK, 1); okVal = new Command("Ok", Command.OK, 2);
formulär.addCommand(bakåtVal); formulär.addCommand(okVal); //Visa formuläret disp.setCurrent(formulär); //koppla på kommandolyssnaren klyssn = new KommandoLyssnaren(); formulär.setCommandListener(klyssn);
//hämta dagens datum
//Visa bara datum i datumfältet
datumfält = new DateField("Datum för logg", DateField.DATE); //Visa dagens datum
datumfält.setDate(dagensDatum);
//Lägg till fältet till formuläret formulär.append(datumfält);
}
/**
* Gör ett nytt formulär, innehållande värdena av: Rubrik, svårighetsgrad och reflektioner.
* Rubriken får max innehålla 30 tecken * Reflektionen får max innehålla 50 tecken. * Intensitetsträngen visar resultat mellan 1 och 5.
* Dessa komponenter läggs till formuläret, händelselyssnaren kopplas på, för okej och bakåtknapp.
*/
public void gauge(){
//Gör en metod som gör formuläret för inmatning av rubrik, svårighet och reflektion
formulär2 = new Form("Ange reflektion:"); //Rubriken får max bestå av 30 tecken
rubrik = new TextField("Rubrik",null, 30, TextField.ANY); //Svårighetsgraden består av värdet 1 - 5och visas med en skala
svarighet = new Gauge("Svårighet (skala 1-5, där 5 är svårast)", true, 5, 1); // Reflektionen är begränsad till 255 tecken.
reflektion = new TextField("Skriv in din reflektion över valt moment", null, 255, TextField.ANY);
//Lägg till inmatade värdet i formulären formulär2.append(rubrik);
formulär2.append(svarighet); formulär2.append(reflektion);
//Lägg till kommando och koppla till knappar.
bakåtFormulär2 = new Command("Bakåt", Command.BACK, 1); okFormulär2 = new Command("Ok", Command.OK, 1);
formulär2.addCommand(bakåtFormulär2); formulär2.addCommand(okFormulär2); //Visa formuläret
disp.setCurrent(formulär2);
//Lyssna efter kommandon på formuläret. klyssn = new KommandoLyssnaren(); formulär2.setCommandListener(klyssn); }
/**
* Börjar med att visa en alert med information. Alerten innehåller också en bild som visas i 2 och en halv sekund.
* Alerten talar om att loggboksstillfället är tillagt och sparat. * Här sker också den temporära sparningen i en vektor.
* Avslutningsvis skrivs också all sparad information ut vid valt kommando. */
public void savedAlert(){
try {
// Gör en bild
Image alertimage2 = Image.createImage("/timglas.png");
// Gör alerten, Lägger till text och bild
savedAlert = new Alert("Sparat", "Loggbokstillfället är sparat!", alertimage2 , AlertType.INFO);
//Ställ visningstiden till 2,5 sekunder savedAlert.setTimeout(2500);
}
//Om undantag sker så skriv det ut i outputen. catch(Exception e)
{
System.out.println("Kan inte visa png-bilden."); }
//Visa alerten
disp.setCurrent(savedAlert);
//Om vektorn inte finns ska den göras //lägg även till inputen i vektorn if (temp==1) {
sparVektor = new Vector();
String out=temp + ". " + aktivitet + datum + "\n" + "Rubrik: " +
rubrik.getString() + "\nSvårighet: " + svarighet.getValue() + "\nReflektion över valda moment: " + reflektion.getString() + "\n";
//Lägges först i vektorn, för att underlätta utskriften sen sparVektor.insertElementAt(out, 0);
} else{
//Lägg till objekt i vektorn
String out="\n" + temp + ". " + aktivitet + datum + "\n" + "Rubrik: " +
rubrik.getString() + "\nSvårighet: " + svarighet.getValue() + "\nReflektion över valda moment: " + reflektion.getString() + "\n";
//Lägges först i vektorn, för att underlätta utskriften sen sparVektor.insertElementAt(out, 0);
}
//Visa allt i Vektorn, 2048 tecken är taget ur luften för att kunna testa att spara temporärt.
visaAllt = new TextBox("Din loggbok innehåller följande...", sparVektor.toString(), 2048 , TextField.ANY);
//Lägg till kommando på textboxen
avslutaVisa = new Command("Avsluta", Command.BACK, 1); nyttVisa = new Command("Mata in nytt", Command.SCREEN, 1); visaAllt.addCommand(avslutaVisa);
visaAllt.addCommand(nyttVisa);
klyssn = new KommandoLyssnaren(); visaAllt.setCommandListener(klyssn); //Visa alert och vad som finns sparas disp.setCurrent(savedAlert, visaAllt); }
//Gör en klass KommandoLyssnaren
private class KommandoLyssnaren implements CommandListener { //Talar om vad som ska hända vid de olika kommandona.
public void commandAction(Command c, Displayable s) { if ( c == bekräftaVal ) {
//Sortera ut vald kurs och gå till datummetoden int valtAlternativ = lista.getSelectedIndex();
aktivitet = "Vald kurs:" + lista.getString(valtAlternativ) + "\n"; date();
}
else if ( c == bakåtVal ) {
//Om man har valt att trycka på bakåt, börja från listan disp.setCurrent(lista);
}
else if ( c == okVal ) {
//Maska ut datum i rätt format dat = datumfält.getDate();
Calendar kal = Calendar.getInstance(); kal.setTime(dat);
int y = kal.get(Calendar.YEAR); int m = kal.get(Calendar.MONTH) + 1; int d = kal.get(Calendar.DATE);
datum = "Datum: " + (y<10? "0": "")+y+"-"+(m<10? "0": "")+m+"- "+(d<10?"0": "")+d;
//Kör mätaren för svårighetsgraden gauge();
}
else if ( c == bakåtFormulär2 )
//om valet är bakåt, börja från datumvalet date();
else if ( c == okFormulär2 ) {
//om valet stämde, Gör en alert med samtliga val som ska visas i telefonen i 5 sekund
temp=temp+1;
val = new Alert("Ditt loggboksinlägg", "Du vill lägga in följande inlägg:\n" + temp + ". " + aktivitet + datum + "\n" + "Rubrik: " + rubrik.getString() + "\nSvårighet: " + svarighet.getValue() + "\nReflektion över valda moment: " + reflektion.getString() + "\n", null, AlertType.INFO);
val.setTimeout(5000);
//Gör en lista där man får välja exklusivt om man ska spara eller inte lista2 = new List("Spara detta tillfälle?", Choice.EXCLUSIVE);
//Lägg till valens text
lista2.append("Ja - Visa hela loggboken", null); lista2.append("Nej - Avbryt och avsluta", null);
//Lägg till knapparna
bakåtLista2 = new Command("Bakåt", Command.BACK, 1); okLista2 = new Command("Ok", Command.OK, 1);
lista2.addCommand(bakåtLista2); lista2.addCommand(okLista2);
//Lyssna efter händelser
klyssn = new KommandoLyssnaren(); lista2.setCommandListener(klyssn);
disp.setCurrent(val, lista2); }
else if ( c == bakåtLista2 ) {
//Om valet var bakåt gå tillbaka till mätarsidan gauge();
temp=temp-1; }
else if ( c == okLista2 ) {
//Om valet är okej, plocka ut valt alternativ int valtAlternativ2 = lista2.getSelectedIndex(); String tmp = lista2.getString(valtAlternativ2); //Är svaret Nej, avbryt och avsluta
if (tmp == "Nej - Avbryt och avsluta") { destroyApp(false);
notifyDestroyed(); }
//Är svaret ja, gå till sparningsmetoden. else if ( tmp == "Ja - Visa hela loggboken") savedAlert();
}
else if ( c == avslutaVisa ) {
//Är valet att avsluta, avbryt och avsluta allt destroyApp(false);
notifyDestroyed(); }
else if ( c == nyttVisa ) {
//är valet en ny inmatning, gå tillbaka till aktivitetslistan disp.setCurrent(lista);
else if ( c == avslutaReflektion ) {
//Är valet att avsluta, avbryt och avsluta allt destroyApp(false);
notifyDestroyed(); }
else if ( c == nyttReflektion ) {
//är valet en ny inmatning, gå tillbaka till aktivitetslistan disp.setCurrent(lista); } } } }