Szkielet aplikacji dla telefonów komórkowych w Javie.

Dla NetBeans 7.1.

Aplikacja zawiera MENU komórkowe z wyborem orientacji telefonu (poziom/pion), główną część aplikacji (wyświetlanie obrazka), oraz dodatkowy wątek dla aplikacji wielowątkowych.

Załączono wszelkie przydatne funkcje, m. in. obsługę klawiatury telefonu i ekranu dotykowego, umieszczanie zdjęć PNG, tworzenie telefonicznego MENU.

Do katalogu z plikami źródłowymi należy wgrać obrazek
http://fulara.com/szkola/foto.png
Obrazek dla aplikacji Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

public class AplikacjaKomorkowa extends MIDlet implements CommandListener{
        private Display display=null;
        private Form settingsForm;
        private ChoiceGroup orientacja;
        private Command exit, go,back=null;
        final program game=new program(display,settingsForm);
     
public AplikacjaKomorkowa()
      {
        settingsForm = new Form("Nazwa formularza");
        go = new Command("Start", Command.OK, 1);
        exit = new Command("Exit", Command.EXIT, 2);   
                       
        settingsForm.append("Tytuł formularza:");
       
        orientacja = new ChoiceGroup("Position (orientacja)",Choice.EXCLUSIVE);
        orientacja.append("Portrait (pionowa)",null);
        orientacja.append("Landscape (pozioma)",null);
        settingsForm.append(orientacja);
        }

        protected void startApp()
        {
          if (display==null)
           {
            display = Display.getDisplay(this);
            settingsForm.addCommand(go);
            settingsForm.addCommand(exit);
            settingsForm.setCommandListener(this);
            display.setCurrent(settingsForm);
           }
        }

        protected void pauseApp()
        { //wywoływana przy zawieszeniu watku przez uzytkownika (np. rozmowa tel)
        }

        protected void destroyApp(boolean unconditional)
        { //przy usuwania watku
         notifyDestroyed();
        }
       
public void startGame()
 { //rozpoczecie watku z gra
    if (back==null) back = new Command("Back", Command.BACK, 0);
    game.setParameters(orientacja.isSelected(0) );
    game.start();
    game.addCommand(back);             
    game.setCommandListener(
      new CommandListener() //nowy watek ktor nasłuchuje wcisniecia klawisza powrót z gry do menu
      {
        public void commandAction(Command c, Displayable s)
        {
                String label = c.getLabel();
                if (label.equals( "Back"))
                {
                    game.stop();
                    display.setCurrent(settingsForm);
                }
        }
     }
  );
 display = Display.getDisplay(this);
 display.setCurrent(game);
  }
 
public void commandAction(Command c, Displayable Displayable)
 { //obsługa przycisków akcji komorki
        String label = c.getLabel();
        if (label.equals("Exit")) destroyApp(false);
          else if (label.equals("Start")) startGame(); 
  }
}

program.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.Sprite;

class program extends Canvas implements Runnable
{
private int szerokosc=240, wysokosc=320;  //numer najechanego klawisza  750x600
private Image  foto;
public boolean pion=true; //polozenie komorki
public watek_z_akcja p; //punkty z czasem
private Display display;
Form settingsForm;

public program(Display _display, Form f) {
display=_display;
settingsForm=f; //formularz powrotu
try{
foto = Image.createImage("/foto.png");
}catch(Exception e) {}
}

public void paint(Graphics g1)
{
//g1 - ekran - g - bufor Image
Image obraz= Image.createImage(szerokosc,wysokosc);
Graphics g= obraz.getGraphics();
g.setColor(0xffffff);
g.fillRect(0,0,szerokosc,wysokosc);

g.drawImage(foto,szerokosc/2,wysokosc/2,Graphics.HCENTER|Graphics.VCENTER);
g.setColor(0xffffff);
g.drawString("Fingerboard Master ", xx(5), yy(5), 0);
if (pion) g1.drawImage(obraz,0,0,0); //komorka pionowo rysuje
else g1.drawRegion(obraz,0,0,szerokosc,wysokosc,Sprite.TRANS_ROT90, 0, 0, Graphics.TOP | Graphics.LEFT);
}

public void setParameters(boolean _pionowa)
{
pion = _pionowa;
}

public int xx(int x)
{
return szerokosc*x/750;
}

public int yy(int y)
{
return wysokosc*y/600;
}

public void init()
{
if (pion)
{
szerokosc=getWidth();//szerokosc i wysokosc ektranu komorki
wysokosc=getHeight();
}
else
{
szerokosc=getHeight();//szerokosc i wysokosc ektranu komorki
wysokosc=getWidth();
}
p = new watek_z_akcja(this);
p.start();
}

public void start() {
Thread t = new Thread(this);
init();
t.start();
}

public void run()
{
repaint();
}

protected void pointerReleased(int x, int y)
{
//puszczenie dotykowego:
repaint();
}

///obsługa wskaźnika touchpad:
public void pointerPressed(int x, int y)
{
//ekran dotykowy
System.out.println(x+" "+y);
}

public void stop()
{
//    p.running=false;
p=null;
}
public void destroy()
{
// p.running=false;
p=null;
}


protected void keyReleased(int keyCode)
{
//zwolnienie klawisza
repaint();
}

protected void keyPressed (int keyCode) {
switch(keyCode)
{
case 0x0063:
case KEY_NUM1:
//       wcisnieto_dzwiek("C");
break;
/*      case 0x0043:
case KEY_NUM2:
wcisnieto_dzwiek("C#");
break;
case 0x0064:
case KEY_NUM3:
wcisnieto_dzwiek("D");
break;
case 0x0044:
case KEY_NUM4:
wcisnieto_dzwiek("D#");
break;
case 0x0065:
case KEY_NUM5:
wcisnieto_dzwiek("E");
break;
case 0x0066:
case KEY_NUM6:
wcisnieto_dzwiek("F");
break;
case 0x0046:
case KEY_NUM7:
wcisnieto_dzwiek("F#");
break;
case 0x0067:
case KEY_NUM8:
wcisnieto_dzwiek("G");
break;
case 0x0047:
case KEY_NUM9:
wcisnieto_dzwiek("G#");
break;
case 0x0061:
case KEY_STAR:
wcisnieto_dzwiek("A");
break;
case 0x0041:
case KEY_NUM0:
wcisnieto_dzwiek("A#");
break;
case 0x0062:
case KEY_POUND:
wcisnieto_dzwiek("B");
break;*/

}
repaint ();
}
}

Dodatkowy wątek:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Date;

class watek_z_akcja extends Thread
{
 Date data;
 program prog;
 
 watek_z_akcja(program _prog)
 {
   prog=_prog;
 }
 
  public void run()
  {
    while (true) // 3,2,1... start
    {
       data=new Date();
        try{ Thread.sleep(1000);} catch (InterruptedException e){}
    }
  }  
}