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

Midlet'lerde Kullanılabilecek Bir Input Dialog

MIDP1.0'da ne yazık ki kullanıcının giriş yapması için bir dialog yok. Bunun için kendiniz bir form yapmalısınız. Biz bu örnekte kullanıcıdan bir yazı almak için kullanılabilecek yararlı bir class yapacağız.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import javax.microedition.lcdui.*;
  2 public class InputDialog extends Form implements CommandListener{
  3     private Command okCommand=new Command("OK",Command.OK,1);
  4     private Command cancelCommand=new Command("Cancel",Command.CANCEL,2);    
  5     private TextField field;    
  6     private ResultListener listener;
  7     public InputDialog(String title,String label,String text,int maxSize,int constraints,ResultListener listener){
  8         super(title);
  9         this.listener=listener;
 10         field=new TextField(label,text,maxSize,constraints);
 11         append(field);        
 12         addCommand(okCommand);
 13         addCommand(cancelCommand);
 14         setCommandListener(this);
 15     }
 16     public void commandAction(Command c, Displayable d){
 17         if(c==okCommand){     
 18             String input=field.getString();
 19             if(listener.ok(input)){
 20                 listener.hide();
 21             }
 22         }else if(c==cancelCommand){
 23             if(listener.cancel()){
 24                 listener.hide();
 25             }
 26         }        
 27     }   
 28     public static interface ResultListener{
 29         public boolean ok(String input);
 30         public boolean cancel();
 31         public void hide();
 32     }
 33 }

InputDialog Form class'ını extends ediyor.İçinde bir TextField (yazı alanı), Bir "ok" düğmesi ve bir "cancel" düğmesi bulunmakta. Kurucuda dilalog'un title'ı, TextField'ın label'ı, TextField'da başlangıçta gözükücek yazıyı, TextField'da girilebilecek max. karakter sayısını, TextField'ın tipini alıyoruz. (TextField tipi TextField.ANY,TextField.PASSWORD,TextField.NUMERIC vs.. şeklinde verilebilir.) Kurucuda en son alınan parametre Listener'dır. ResultListener bir interface'dir. Bu interface'i implements etmiş bir class, dilog'un davranışlarını kontrol eder. ok() method'u kullanıcı ok düğmesine tıklanınca çağırılır. Eğer dinleyen class true göndermesse dilalog kapanmaz. cancel() method'u kullanıcı cancel'a bastığında çağrılır. Eğer dinleyen class false döndürürse cancel işlemi gerçekleşmez. hide() ise dilaog'u kapatma çağrısıdır. Dinleyen class başka bir nesneyi gözükür hale getirerek dialog'u kapatabilir.

Örnek olarak InputDialog class'ını kullanmak için InputDialogTestMIDlet.java midlet'ini yarattık.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import javax.microedition.midlet.*;
  2 import javax.microedition.lcdui.*;
  3 public class InputDialogTestMIDlet extends MIDlet implements CommandListener,InputDialog.ResultListener{
  4     private Command showCommand=new Command("Show",Command.OK,1);
  5     private Form testForm;
  6     public void startApp(){
  7         testForm=new Form("Test");
  8         testForm.addCommand(showCommand);
  9         testForm.setCommandListener(this);
 10         Display.getDisplay(this).setCurrent(testForm);
 11     }    
 12     public void pauseApp(){}   
 13     public void destroyApp(boolean unconditional){}
 14     public void commandAction(Command c, Displayable d){
 15         if(c==showCommand){     
 16             InputDialog dialog=new InputDialog("Test","","",100,TextField.ANY,this);
 17             Display.getDisplay(this).setCurrent(dialog);
 18         }        
 19     }  
 20     public boolean ok(String input){
 21         if(input.length()>8){
 22             return true;
 23         }else{
 24             return false;
 25         }
 26     }
 27     public boolean cancel(){
 28         return true;
 29     }
 30     public void hide(){
 31         Display.getDisplay(this).setCurrent(testForm);
 32     }    
 33 }

Bu midlet'te bir test formu yaratıyor ve gösteriyoruz. Bu formdaki show komutu seçilirse dialog gösterilir.

InputDialog dialog=new InputDialog("Test","","",100,TextField.ANY,this);
Display.getDisplay(this).setCurrent(dialog);

InputDialogTestMIDlet InputDialog.ResultListener interface'sini implements ettiği için InputDialog'un kurucusunda this ile kendisini verdik. ok() methodunda girilen değerin 8 karakterden büyük olup olmadığı kontrol ediliyor. Eğer küçükse false döndürülüyor. Böylece dilalog kutusu kapanmamış oluyor. Eğer true gönderilirse dialog hide() method'unu çağırıyor. hide() method'u ise

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

ile tekrar test formunu gösteriyor. (kendisini kapatıyor)

Dosya Listesi

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