J2ME – TextBox UI Bileşeni

J2ME ortamında yazı tipinde veri girişi yapmak için kullandığımız bileşenlerden biri TextBox’ tır. Bu nesne tüm ekranımızı kaplayarak bize tam sayfa görünümünde veri girişi yapma imkanı verir. Bu veri girişi harf, sayı veya klavyemizin desteklediği herhangi bir karakter olabilir. TextBox’ lar tüm yüksek seviye bileşenler gibi telefonlar arasında farklılıklar gösterebilir.
TextBox yapısı aşağıdaki gibidir.

TextBox (String title, String text, int maxSize, int constraints)

Bu yapıda istenen dört parametre sırası ile title, text, maxSize ve constraints’ tir.

title - Yazı giriş alanının üstünde bulunacak başlıktır.
text - Veri giriş alanımızın içerisinde başlangıçta bulunacak yazı.
maxSize - Veri giriş alanımızın alabileceği karakter sayısı
constraints - Girilecek verinin kontrolü.

Constraints bize belli bir veri giriş tipi sunar örnek olarak 0 gönderirsek istediğimiz herhangi bir karakteri girebiliriz. Ancak kod içerisine sayı girmek kafa karıştırabilir ve çoğu zaman hangi sayının neye karşılık geldiğini unutabiliriz. Bu yüzden sayı girmek yerine bir form bileşeni olan TextField sınıfına ait veri giriş tiplerinin sayı karşılıklarını döndüren static değişkenleri kullanabiliriz. Bu değişkenler bize kullanmamız gereken sayıları daha anlamlı bir şekilde gösterir. Örnek olarak 0 kullanacağımız yerde TextField.ANY diyebiliriz burada dönecek değişken bize herhangi bir karakter girişi yapmamızı sağlayabilir. TextField nesnesine ait bu değişkenler final ve statictir bu yüzden değiştirilemez ve nesnesi oluşturulması gerekmez.
TextField Nesnesine ait kullanabileceğimiz diğer tipler aşağıdaki gibidir.

ANY - Herhangi bir karakter
EMAILADDR - E-mail adresi
NUMERIC - Sayı
PHONENUMBER - Telefon numarası
URL - İnternet adresi
DECIMAL - Ondalıklı
PASSWORD - Şifre

textbox

Constraints bize bir çok kolaylıkta sağlar.
Örnek olarak yukarıdaki resimde görüldüğü gibi 2 sayısını ifade eden tuş aynı zamanda A, B ve C harflerini de ifade eder normal şartlarda TextBox alanına sadece sayı girecek olursak 2 numaralı tuşa 4 defa basmamız gerekecektir. Bu 7 sayısı için 5 keredir. Bu durumda ekrana bir telefon numarası yazacağımızı varsayalım. Telefon numaramızda 07872787767 olsun bu durumda toplam 38 kere tuşlara basmamız gerekiyor. NUMERIC tipte bir constraints tipi tanımladığınız anda bu sayı 11 oluyor. NUMERIC tip her tuşun sadece sayı değeri taşıdığını belirtiyor bu durumda 2 tuşu A-B-C harfleri değil sadece 2 karaterini temsil ediyor.
Başka bir örnek olarak PHONENUMBER tipinde bir constraint sayı kontrolu yanında 12345678910 şeklinde girilen bir değeri 123 456 78910 şeklinde çevirir.

Screen nesnesinden türeyen tüm bileşenler gibi TextBox lardan da ekranda sadece bir adet bulunur. Ekrana atadığımız TextBox tüm ekranı kaplar ve diğer bileşenler 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) {
        }
    }

Yukarıdaki MIDlet örneğimizde 7 adet TextBox bulunuyor ve bunların hepsi ayrı Constraints değerlerine sahip ve bunlardan sadece ornek1 nesnesini ekranda gösteriyoruz.

TextBox nesnesi üzerindeki değerlere ulaşmak için TextBox sınıfı içerisinde bazı metodlar mevcuttur. Örneğin başlık değiştirme, yazı değeri alma gibi işlemlerde get ve set metodları vasıtasıyla TextBox üzerinde istediğimiz değişikliği yapabilir veri ulaşımını sağlayabiliriz.

getString(), setString();

TextBox içerisindeki değerin değişimi veya erişimi için kullanılır. Aslında bu değer adındanda anlaşılabileceği gibi kurucu metod içerisinde girilen text değeridir. Nesneyi yarattıktan sonra da bu değeri değiştirme veya erişme imkanımız vardır.

    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 yukarıdaki kod bloğunda mesaj adında bir TextBox yaratılmıştır. Text değeri olarak nesnenin yaratılması anında “Örnek Yazi” belirtilmiştir. Ancak mesaj.setString(“Yeni Örnek Yazi”); satırı ile bu değeri “Yeni Örnek Yazi” olarak değiştiriyoruz. İki ayrı kod bloğu olan System.out.println(mesaj.getString()); satırları mesaj nesnesinin text içeriğini konsola yazdırır. Bu durumda birinci adımda konsol ekranına “Örnek Yazi” yazılacakken ikinci adımda “Yeni Örnek Yazi” yadırılır. Bu erişim sınıf içerisindeki herhangi bir yerden olabilir.

getSize(), setSize();

TextBox boyutları kurucu metodumuzdaki maxSize parametresi ile belirtilir bu parametreye kurucu metod haricinde getSize() ve setSize(int size) metodları ile de erişebiliriz.

    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 bloğumuzda içeriği “Örnek yazi” olan mesaj bir TextBox nesnemiz var. Öncelikle System.out.println(mesaj.getMaxSize()); ile nesnemizin text boyutuna ulaşıyoruz. Başlangıç anında 160 verdiğimizden sonuç konsol ekranına 160 olarak bastırılıyor. mesaj.setMaxSize(100); satırında boyutu 100 olarak atıyoruz ve ikinci konsola yazdırma satırımızda değer 100 olarak dönüyor.

size
Bazen nesnemizin içerik boyutuna ihtiyaç duyabiliriz bu gibi durumlarda text metodu bize karakter uzunluğunu 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) {
        }
    }

Yukarıdaki kodumuzda oluşturulan TextBox nesnesinin içerik uzunluğunu alıyoruz ilk adımda “Ornek Yazi” karakterinin uzunluğudur yani 10. mesaj.setString(“Yeni Örnek Yazi”); satırında TextBox nesnemizin içeriğini “Yeni Örnek Yazi” olarak değiştiriyoruz bu durumda ekrana size değerini bastırmak istediğimizde sonuç 15 olarak dönüyor. size metodu bir çok yerde kullanılabilir. Örnek olarak kullanıcıya veri girişi yaptırıken metin uzunluğunun istenen değerin üstünde veya altında olup olmadığını kontrol ettirebiliriz.

Dec 23rd, 2008
No comments yet.

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>