İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Zafer Teker
tekzaf@yahoo.com

Midlet'lerin Arayüzü

Giriş

Standart java sürümünde arayüz paketleri AWT ve Swing'tir. Ancak cep telofonların çoğunda şu anda desteklen MIDP1.0'ın arayüz sistemi değişiktir. Bu arayüz sisteminin class'ları "javax.microedition.lcdui" paketindedir. lcdui (limited connected user interface) AWT ve Swing'ten çok farklıdır. Bu yazıda lcdui paketinin özellikleri anlatılacaktır.

En temel class Display class'ıdır. Display ekranda gözüken ve giriş yapılan bölgedir. Display class'ının static

getDisplay(MIDlet m)

method'u parametre olarak verilen midletin Display'ini vermektedir. Örneğin

Display.getDisplay(this)

bize içinde bulunduğumuz midletin Display'ini verir. Midlet'in Display nesnesini aldıktan sonra

setCurrent(Displayable Displayable)

ile şu anda gözüken ekrana bir Displayable nesnesi konur.

Displayable bir abstract class'dır ve ekranı tamamen kapalayacak bileşenlerin extend ettiği bir class'tır. Displayable class'ını extend eden bir nesne

Display.getDisplay(this).setCurrent(nesne)

ile görünür hale gelir.

Displayable class'ını iki class extend etmiştir: Canvas ve Screen

Canvas

Bir canvas bir dikdörtgen şeklinde ekranı tamamen kaplar ve üzerine çizim yapılır. Canvas class'ının paint methodu abstract olduğu için Canvas class'ını extend eden bir class yaratmalısınız. Aşağıda ekrana bir dikdörtgen çizen bir örnek görüyorsunuz.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import javax.microedition.midlet.*;
  2 import javax.microedition.lcdui.*;
  3 public class TestCanvasMidlet extends MIDlet{    
  4     public void startApp(){
  5         TestCanvas canvas=new TestCanvas();
  6         Display.getDisplay(this).setCurrent(canvas);
  7     }    
  8     public void pauseApp(){}    
  9     public void destroyApp(boolean unconditional){}
 10     public class TestCanvas extends Canvas{
 11         public void paint(Graphics g){
 12             g.setColor(255,255,255);
 13             g.fillRect(0,0,getWidth(),getHeight());
 14             g.setColor(0,0,0);
 15             g.drawRect(10,10,50,50);
 16         }
 17     }
 18 }

TestCanvas class'ını yarattık (Canvas'ı extedn ettik ve paint methodunu overide ettik).

public void startApp(){
	TestCanvas canvas=new TestCanvas();
	Display.getDisplay(this).setCurrent(canvas);
}

Midlet başlatıldığında startApp() methodu çağrılır. Biz TestCanvas nesnesi yaratıyor ve

Display.getDisplay(this).setCurrent(canvas);

diyerek bu canvas'ın gözükmesini sağlıyoruz. TestCanvas'taki önce rengi beyaz yapıp tüm ekranı beyaza boyuyoruz. (Ekranı temizledik) sonra rengi siyah yapıp dikdörtgeni çiziyoruz.

Oyunlar Canvas class'ını extend edilerek yapılmaktadır. Eğer liste,seçenek kutusu,onay kutusu,yazı alanı gibi bileşenler kullanmak istiyorsanız Canvas kullanamazsınız. Bu bileşenlerin hepsi Screen class'ını extedn etmiştir. Şimdi Screen class'ından bahsedilecek.

Screen

Liste,Form(yazı alanı,onay kutusu,seçenek kutusu vs. koymak için),Text Box ve Alert class'ları Screen class'ını extends etmiştir. Screen class'ının nesnesi yaratılamz. Bunun yerine List,Form,TextBox ve Alert class'larından birini kullanmalısınız. Bu nesneleri tıpkı yukaridaki örnekteki canvas'taki gibi

Display.getDisplay(this).setCurrent(nesne); 

şeklinde görünür hale getirilir. Örneğin bir TextBox göstermek için

TextBox box=new TextBox("Başlik","Hello World",100,TextField.ANY);
Display.getDisplay(this).setCurrent(box);

kodlarını startApp() methodunun içine yazmak yeterlidir.

TextBox sadece yazı alanından ibaret bir classtır. Içerisine başka bileşenler eklenmez. Alert class'ı ise kullanıcıya bir bilgi vermek için kullanılır ve ok düğmesi tıklandığında kapanır. Bir alert göstermek için

Alert alert=new Alert("Alert","Bu bir alert mesaji",null,null);
alert.setTimeout(Alert.FOREVER);
Display.getDisplay(this).setCurrent(alert);

yapmanız yeterlidir. Ok tuşu tıklandığında eski gösterilen bileşen gösterilir.

Liste ise birden çok elamanı listeler ve elamanlardan biri seçildiğinde size bildirir. Aşağıdaki örnekte bir liste yaratıyoruz. Liste seçildiği zaman liste elamanını bir alert açip gösteriyoruz.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import javax.microedition.midlet.*;
  2 import javax.microedition.lcdui.*;
  3 public class TestListMidlet extends MIDlet{    
  4     public void startApp(){
  5         TestList list=new TestList();
  6         Display.getDisplay(this).setCurrent(list);    
  7     }
  8     public void pauseApp(){}
  9     public void destroyApp(boolean unconditional){}
 10     private void displayAlert(Alert alert){
 11         Display.getDisplay(this).setCurrent(alert);
 12     }
 13     public class TestList extends List  implements CommandListener{
 14         public TestList(){
 15             super("Test List",List.IMPLICIT);
 16             append("A",null);
 17             append("B",null);
 18             append("C",null);
 19             setCommandListener(this);
 20         }
 21         public void commandAction(Command c, Displayable d){
 22             if(c==List.SELECT_COMMAND){
 23                 int index=getSelectedIndex();
 24                 String choice=getString(index);
 25                 Alert alert=new Alert("Alert",choice,null,null);
 26                 alert.setTimeout(Alert.FOREVER);
 27                 displayAlert(alert);
 28             }
 29         }
 30         
 31     }
 32 }

Liste elamanının seçildiğini anlamak için önce implements CommandListener dememiz gerekir. CommandListener implements edildiğinde

public void commandAction(Command c, Displayable d){}

methodu çağrılır.

if(c==List.SELECT_COMMAND)

ile bir liste elamanı seçildiğini anlıyoruz.

int index=getSelectedIndex();
String choice=getString(index);

ile elamanın string'ini alıyoruz ve bu string'i alert'de gösteriyoruz. (TestListMidlet class'ına bir displayAlert methodu çağrılıyor.)

Form ise içerisine onay kutusu,yazı alanı vs gibi bileşen eklemek için kullanılır. Örneğin bir text alanı ve bir seçenek kutusu olan bir form yapalım. Bir ok komutu ekleyelim ve tıklandığında text alanındaki yazıyı ve seçilmis elemanı alert'te gösterelim.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import javax.microedition.midlet.*;
  2 import javax.microedition.lcdui.*;
  3 public class TestFormMidlet extends MIDlet{
  4     public void startApp(){
  5         TestForm form=new TestForm();
  6         Display.getDisplay(this).setCurrent(form);    
  7     }    
  8     public void pauseApp(){}    
  9     public void destroyApp(boolean unconditional){}
 10     private void displayAlert(Alert alert){
 11         Display.getDisplay(this).setCurrent(alert);
 12     }    
 13     public class TestForm extends Form  implements CommandListener{    
 14         Command okCommand=new Command("OK",Command.OK,1);
 15         TextField field;
 16         ChoiceGroup group;
 17         public TestForm(){
 18             super("Test Form");
 19             field=new TextField("Test","",1000,TextField.ANY);
 20             group=new ChoiceGroup("Test Grup",ChoiceGroup.EXCLUSIVE);
 21             group.append("A",null);
 22             group.append("B",null);            
 23             group.append("C",null);
 24             append(field);
 25             append(group);
 26             addCommand(okCommand);
 27             setCommandListener(this);        
 28         }
 29         public void commandAction(Command c, Displayable d){
 30             if(c==okCommand){
 31                 String s=field.getString();
 32                 int index=group.getSelectedIndex();
 33                 String selected=group.getString(index);
 34                 Alert alert=new Alert("Alert",s+":"+selected,null,null);
 35                 alert.setTimeout(Alert.FOREVER);
 36                 displayAlert(alert);            
 37             }    
 38         }    
 39     }
 40 }

Midletlerin arayüzü standart java'dan farklı olmasına rağmen anlaşılması ve uygulanması gerçekten çok kolay bir arayüzdür. Size bir midlete form koyduğunuzda bu formun nasıl gösterileceği telofona kalmıştır. Her telefonda aynı görüntüyü elde edemezsiniz. Ancak formun doğru çalışacağına emin olabilirsiniz.

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır