J2ME - TextBox UI Bileseni
J2ME ortaminda yazi tipinde veri girisi yapmak için kullandigimiz bilesenlerden biri TextBox’ tir. Bu nesne tüm ekranimizi kaplayarak bize tam sayfa görünümünde veri girisi yapma imkani verir. Bu veri girisi harf, sayi veya klavyemizin destekledigi herhangi bir karakter olabilir. TextBox’ lar tüm yüksek seviye bilesenler gibi telefonlar arasinda farkliliklar gösterebilir.
TextBox yapisi asagidaki gibidir.
TextBox (String title, String text, int maxSize, int constraints)
Bu yapida istenen dört parametre sirasi ile title, text, maxSize ve constraints’ tir.
title Yazi giris alaninin üstünde bulunacak basliktir.
text Veri giris alanimizin içerisinde baslangiçta bulunacak yazi.
maxSize Veri giris alanimizin alabilecegi karakter sayisi
constraints Girilecek verinin kontrolü.
Constraints bize belli bir veri giris tipi sunar örnek olarak 0 gönderirsek istedigimiz herhangi bir karakteri girebiliriz. Ancak kod içerisine sayi girmek kafa karistirabilir ve çogu zaman hangi sayinin neye karsilik geldigini unutabiliriz. Bu yüzden sayi girmek yerine bir form bileseni olan TextField sinifina ait veri giris tiplerinin sayi karsiliklarini döndüren static degiskenleri kullanabiliriz. Bu degiskenler bize kullanmamiz gereken sayilari daha anlamli bir sekilde gösterir. Örnek olarak 0 kullanacagimiz yerde TextField.ANY diyebiliriz burada dönecek degisken bize herhangi bir karakter girisi yapmamizi saglayabilir. TextField nesnesine ait bu degiskenler final ve statictir bu yüzden degistirilemez ve nesnesi olusturulmasi gerekmez.
TextField Nesnesine ait kullanabilecegimiz diger tipler asagidaki gibidir.
ANY Herhangi bir karakter
EMAILADDR E-mail adresi
NUMERIC Sayi
PHONENUMBER Telefon numarasi
URL Internet adresi
DECIMAL Ondalikli
PASSWORD Sifre
Constraints bize bir çok kolaylikta saglar.
Örnek olarak yukaridaki resimde görüldügü gibi 2 sayisini ifade eden tus ayni zamanda A, B ve C harflerini de ifade eder normal sartlarda TextBox alanina sadece sayi girecek olursak 2 numarali tusa 4 defa basmamiz gerekecektir. Bu 7 sayisi için 5 keredir. Bu durumda ekrana bir telefon numarasi yazacagimizi varsayalim. Telefon numaramizda 07872787767 olsun bu durumda toplam 38 kere tuslara basmamiz gerekiyor. NUMERIC tipte bir constraints tipi tanimladiginiz anda bu sayi 11 oluyor. NUMERIC tip her tusun sadece sayi degeri tasidigini belirtiyor bu durumda 2 tusu A-B-C harfleri degil sadece 2 karaterini temsil ediyor.
Baska bir örnek olarak PHONENUMBER tipinde bir constraint sayi kontrolu yaninda 12345678910 seklinde girilen bir degeri 123 456 78910 seklinde çevirir.
Screen nesnesinden türeyen tüm bilesenler gibi TextBox lardan da ekranda sadece bir adet bulunur. Ekrana atadigimiz TextBox tüm ekrani kaplar ve diger bilesenler için herhangi bir görüntüye izin vermez.
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class OrnekMIDlet extends MIDlet { public void startApp() { TextBox ornek1= new TextBox("Ornek","",20,TextField.PHONENUMBER); TextBox ornek2= new TextBox("Ornek","",20,TextField.ANY); TextBox ornek3= new TextBox("Ornek","",20,TextField.NUMERIC); TextBox ornek4= new TextBox("Ornek","",20,TextField.DECIMAL); TextBox ornek5= new TextBox("Ornek","",20,TextField.EMAILADDR); TextBox ornek6= new TextBox("Ornek","",20,TextField.HYPERLINK); TextBox ornek7= new TextBox("Ornek","",20,TextField.PASSWORD); Display ekran=Display.getDisplay(this); ekran.setCurrent(ornek1); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } }
Yukaridaki MIDlet örnegimizde 7 adet TextBox bulunuyor ve bunlarin hepsi ayri Constraints degerlerine sahip ve bunlardan sadece ornek1 nesnesini ekranda gösteriyoruz.
TextBox Bilgilerine Ulasmak
TextBox nesnesi üzerindeki degerlere ulasmak için TextBox sinifi içerisinde bazi metodlar mevcuttur. Örnegin baslik degistirme, yazi degeri alma gibi islemlerde get ve set metodlari vasitasiyla TextBox üzerinde istedigimiz degisikligi yapabilir veri ulasimini saglayabiliriz.
getString(), setString();
TextBox içerisindeki degerin degisimi veya erisimi için kullanilir. Aslinda bu deger adindanda anlasilabilecegi gibi kurucu metod içerisinde girilen text degeridir. Nesneyi yarattiktan sonra da bu degeri degistirme veya erisme imkanimiz vardir.
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class OrnekMIDlet extends MIDlet { public void startApp() { TextBox mesaj= new TextBox("Mesaj","Örnek Yazi",160,TextField.ANY); Display ekran=Display.getDisplay(this); ekran.setCurrent(mesaj); System.out.println(mesaj.getString()); mesaj.setString("Yeni Örnek Yazi"); System.out.println(mesaj.getString()); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } }
Örnek olarak startApp motodu içirisindeki yukaridaki kod blogunda mesaj adinda bir TextBox yaratilmistir. Text degeri olarak nesnenin yaratilmasi aninda “Örnek Yazi” belirtilmistir. Ancak mesaj.setString(”Yeni Örnek Yazi”); satiri ile bu degeri “Yeni Örnek Yazi” olarak degistiriyoruz. Iki ayri kod blogu olan System.out.println(mesaj.getString()); satirlari mesaj nesnesinin text içerigini konsola yazdirir. Bu durumda birinci adimda konsol ekranina “Örnek Yazi” yazilacakken ikinci adimda “Yeni Örnek Yazi” yadirilir. Bu erisim sinif içerisindeki herhangi bir yerden olabilir.
getSize(), setSize();
TextBox boyutlari kurucu metodumuzdaki maxSize parametresi ile belirtilir bu parametreye kurucu metod haricinde getSize() ve setSize(int size) metodlari ile de erisebiliriz.
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class OrnekMIDlet extends MIDlet { public void startApp() { TextBox mesaj= new TextBox("Mesaj","Ornek Yazi",160,TextField.ANY); Display ekran=Display.getDisplay(this); ekran.setCurrent(mesaj); System.out.println(mesaj.getMaxSize()); mesaj.setMaxSize(100); System.out.println(mesaj.getMaxSize()); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } }
Kod blogumuzda içerigi “Örnek yazi” olan mesaj bir TextBox nesnemiz var. Öncelikle System.out.println(mesaj.getMaxSize()); ile nesnemizin text boyutuna ulasiyoruz. Baslangiç aninda 160 verdigimizden sonuç konsol ekranina 160 olarak bastiriliyor. mesaj.setMaxSize(100); satirinda boyutu 100 olarak atiyoruz ve ikinci konsola yazdirma satirimizda deger 100 olarak dönüyor.
size
Bazen nesnemizin içerik boyutuna ihtiyaç duyabiliriz bu gibi durumlarda text metodu bize karakter uzunlugunu verir.
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class OrnekMIDlet extends MIDlet { public void startApp() { TextBox mesaj= new TextBox("Mesaj","Ornek Yazi",160,TextField.ANY); Display ekran=Display.getDisplay(this); ekran.setCurrent(mesaj); System.out.println(mesaj.size()); mesaj.setString("Yeni Örnek Yazi"); System.out.println(mesaj.size()); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } }
Yukaridaki kodumuzda olusturulan TextBox nesnesinin içerik uzunlugunu aliyoruz ilk adimda “Ornek Yazi” karakterinin uzunlugudur yani 10. mesaj.setString(”Yeni Örnek Yazi”); satirinda TextBox nesnemizin içerigini “Yeni Örnek Yazi” olarak degistiriyoruz bu durumda ekrana size degerini bastirmak istedigimizde sonuç 15 olarak dönüyor. size metodu bir çok yerde kullanilabilir. Örnek olarak kullaniciya veri girisi yaptiriken metin uzunlugunun istenen degerin üstünde veya altinda olup olmadigini kontrol ettirebiliriz.
28 Şubat 2008, 19:20 tarihinde.
ust taraftaki kaynak icin cok teşekkur ederim cok isime yaradı