J2ME etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
J2ME etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

5 Ağustos 2010 Perşembe

J2ME İLE FILE BROWSER

          J2ME ile  mobil aygıtlar için bir dosya tarayıcısı yapalım. Bu sayede cihazımızın belleğindeki dosyaları görüntüleyebileceğiz.

          Uygulamamızı adım adım yapalım:

          Netbeanste yeni bir proje açıyoruz.

          * Proje türünü Java ME -> Mobile Application seçiyoruz.
        
          * Uygulamamıza isim verirken "Create HelloMIDlet" checkbox ın checkini kaldırıyoruz ve projemizi oluşturuyoruz.

          * Sol taraftaki Projects kısmında projemizin üzerine gelip New->Java Package diyoruz.

          * Projemizle aynı isimli paketimizi oluşturuyoruz.

          * Paketimizin üzerine gelip New->Visual Mıdlet diyoruz.

          * Projemizle aynı ismi verip Midletimizi olşturuyoruz.

         * Midletimizi açtığımızda karşımıza Flow Designerı çıkıyor.Bu ekranda sağdaki Paletimizden bileşenleri sürükleyip bırakıyoruz.

         * 1 tane File Browser,1 tane Splash Screen,1 tane de Textbox sürükleyip bırakıyoruz.

         * Şimdi de Commandlarımızı ekleyelim.Exit commandını File Browsera,Back commandını Textbox a sürükleyip bırakıyoruz.

        * Her şey iyi hoş,bileşenleri ekledik ancak bunların şu anda birbiriyle bir bağlantısı yok.Bunu da şu şekilde yapıyoruz :



          * Şimdi sırada kodumuza dosyaları okuyacak metodu eklemek var.Source sekmesinden kodumuzu açtıktan sonra aşağıdaki kodu ekliyoruz :

private void readFile() {
        try {
            FileConnection textFile = fileBrowser.getSelectedFile();
            getTextBox().setString("");
            InputStream fis = textFile.openInputStream();
            byte[] b = new byte[1024];
            int length = fis.read(b, 0, 1024);
            fis.close();
            if (length > 0) {
                textBox.setString(new String(b, 0, length));
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

          * Son olarak da bu metodu çağırmamız gerekiyor.commandAction metodumuzun içinde readFile() diyerek metodumuzu çağırıyoruz.


public void commandAction(Command command, Displayable displayable) {
    
        if (displayable == fileBrowser) {
            if (command == FileBrowser.SELECT_FILE_COMMAND) {
               readFile();
               switchDisplayable(null, getTextBox());
              
            } else if (command == exitCommand) {
            
                exitMIDlet();
              
            }
        } else if (displayable == splashScreen) {
            if (command == SplashScreen.DISMISS_COMMAND) {
              
                switchDisplayable(null, getFileBrowser());
              
            }
        } else if (displayable == textBox) {
            if (command == backCommand1) {
              
                switchDisplayable(null, getFileBrowser());
              
            }
        }
      
    }

            Vee artık projemizi çalıştırabilir,telefonumuzun içindeki dosyalara göz atabilir,istediğimiz dosyanın içeriğini görüntüleyebiliriz.

http://netbeans.org/


1 Ağustos 2010 Pazar

J2ME KULLANICI ARAYÜZÜ ( USER INTERFACE ) BİLEŞENLERİ

     Bu yazımda J2ME uygulamalarının kullanıcı tarafında sunulmasını sağlayan kullanıcı arayüz bileşenlerinden kısaca bahsedip basit bir uygulama yapacağım.
     J2ME de arayüz bileşenleri ikiye ayrılır.Bunlar düşük seviye ve yüksek seviye bileşenlerdir.Düşük seviye bileşenler çalıştığı sisteme bağlı olmayıp bütün cihazlarda aynı görünüme sahiptirler.Bu bileşenleri Canvas sınıfı oluşturur.Canvaslar grafik çizmek için kullanılırlar.Yüksek seviye bileşenler ise çalıştıkları sisteme bağlıdırlar.Yani çalıştıkları cihazın kütüphanelerini kullanırlar.Dolayısıyla görünümleri cihazdan cihaza farklılık gösterebilir.Bu bileşenler ise Screen sınıfından türemişlerdir.


Burada bir şeyi belirtmek gerekiyor ki yukarıda gördüğümüz ,Screen sınıfından türeyen Alert,List,Textbox gibi bileşenlerden ekranda bir seferde  yalnızca bir tanesi gösterilebiliyor.Ekranda birden fazla bileşen göstermek istiyorsak Form sınıfını kullanmamız gerekiyor ve form sınıfından türeyen Choice Group,DateField gibi bileşenleri forma ekleyip formumuzu da ekrana eklememiz gerekiyor.Bir diğer önemli nokta ise dokunmatik ekrana sahip ceptelefonları dışında,ceptelefonlarında butonların kullanılmayışıdır.Bunun yerine Command kullanırız.Şimdi isterseniz bu bileşenleri kullandığımız basit bir uygulama yapalım:

package hello;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HelloMIDlet extends MIDlet implements CommandListener {

    private boolean midletPaused = false;

    Display ekran;
    Command karsılastir;
   
    TextField cumle;
    TextField cumle2;                     
    private Command exitCommand;
    private Form form;
    private StringItem stringItem;
   
    public HelloMIDlet() {

        form=new Form("Formumuz");
          
            cumle=new TextField("Cümle:","bu cümleyi yaz",40,TextField.ANY);
            cumle2=new TextField("Senin Cümlen:",null,40,TextField.ANY);

            karsılastir=new Command("Karsılastir",Command.OK,1);
            exitCommand=new Command("Çıkış",Command.EXIT,2);

            form.append(cumle);
            form.append(cumle2);

            ekran=Display.getDisplay(this);
            form.addCommand(karsılastir);
            form.addCommand(exitCommand);

            form.setCommandListener(this);

    }

  
    private void initialize() {                                        
        // write pre-initialize user code here
                                          
        // write post-initialize user code here
    }                           
    
    public void startMIDlet() {                                     
        // write pre-action user code here
        switchDisplayable(null, getForm());                                       
        // write post-action user code here
    }                            
    
    public void resumeMIDlet() {                                      
        // write pre-action user code here
                                        
        // write post-action user code here
    }                             
   
    public void switchDisplayable(Alert alert, Displayable nextDisplayable) {                                            
        // write pre-switch user code here
        Display display = getDisplay();                                              
        if (alert == null) {
            display.setCurrent(nextDisplayable);
        } else {
            display.setCurrent(alert, nextDisplayable);
        }                                            
        // write post-switch user code here
    }                                  
  
    public void commandAction(Command command, Displayable displayable) {                                              
       
        if (displayable == form) {                                          
            if (command == exitCommand) {                                        

               
                exitMIDlet();                                          
                // write post-action user code here
            }                                                 
        }                                               
        if(command==karsılastir)
       {
          
         int snc=cumle2.getString().compareTo(cumle.getString());
           if(snc!=0)
           {
               Alert uyarı=new Alert("HATA!!!","yanlıs giris",null,AlertType.ERROR);
               ekran.setCurrent(uyarı);
           
           }
          
 else
           {
               Alert uyarı=new Alert("TEBRİKLER","dogru giris",null,AlertType.CONFIRMATION);
               ekran.setCurrent(uyarı);

 }

       }

    }                              
   
    public Command getExitCommand() {
        if (exitCommand == null) {                                
            // write pre-init user code here
            exitCommand = new Command("Exit", Command.EXIT, 0);                                  
            // write post-init user code here
        }                        
        return exitCommand;
    }
    
    public Form getForm() {
        if (form == null) {                                
            // write pre-init user code here
            form = new Form("Welcome", new Item[] { getStringItem() });                                   
            form.addCommand(getExitCommand());
            form.setCommandListener(this);                                 
            // write post-init user code here
        }                        
        return form;
    }
   
    public StringItem getStringItem() {
        if (stringItem == null) {                                
            // write pre-init user code here
            stringItem = new StringItem("Hello", "Hello, World!");                                  
            // write post-init user code here
        }                        
        return stringItem;
    }
    
    public Display getDisplay () {
        return Display.getDisplay(this);
    }

    /**
     * Exits MIDlet.
     */
    public void exitMIDlet() {
        switchDisplayable (null, null);
        destroyApp(true);
        notifyDestroyed();
    }

  
    public void startApp() {
        if (midletPaused) {
            resumeMIDlet ();
        } else {
            initialize ();
            startMIDlet ();
            ekran.setCurrent(form);

        }
        midletPaused = false;
    }

  
    public void pauseApp() {
        midletPaused = true;
    }

  
    public void destroyApp(boolean unconditional) {
    }
 }      

Bu kadar koda bakıpta çok bişey yaptığını düşünmeyin:) Yaptığı şey şu: 1.textFielddeki cümle ile 2. textFielddeki yani kullanıcının girdiği cümleyi karşılaştırıp doğru yada yanlış şeklinde geri bildirimde bulunuyor.
Koda baktığımızda bizim için önemli olan kısımlar kalın harflerle yazılmış kısımlardır.Birinci kısım ,HelloMIDlet metodu Constructor metodumuz.Burada bileşenleri oluşturup forma ekledik formu da ekrana ekledık.İkinci kısımda ise yani commandAction metodumuzda Commandlarımızdan biri uyarıldığıı takdirde yapılacak işlemleri belirttik.

4 Temmuz 2010 Pazar

HELLO J2ME WORLD

         
             Bu yazımda J2ME ' e giriş yapmaya çalışacağım.J2ME ,  javanın cep telefonları , PDA lar , gömülü cihazlar gibi mobil cihazlar için geliştirilmiş versiyonudur.Birtakım profiller içerir.Bu profillerde belirli bir tipteki cihaz için gerekli minumum sınıf kütüphanesi ve cihazı destekleyen java sanal makinesi tanımlanır.Şimdi gelin bu profillere bir göz atalım:

             Foundation Profile : CDC tabanlı ve grafiksel arayüze sahip olmayan cihazlar için tanımlanmış bir profildir.

             Mobile Information Device Profile (MIDP) : CLDC tabanlıdır ve mobil bilgi cihazları için tanımlanmış bir profildir.

             Personal Basis ,Personal and RMI Profile : CDC ve Foundation Profile tabanlı cihazlar için grafik  ve RMI desteği sunar.

             Profiller aslında bir iş yapmazlar , sadece tanımlamaları içerirler.Profillerin tanımladıkları belirtimleri konfigürasyonlar gerçekleştirir.

             Connected Device Configuration (CDC) : Yeni nesil gömülü ve elektronik cihazlar için Foundation Profile ' ın gerçekleştirimidir.

             Connected Limited Device Configuration (CLDC) : Kaynak kısıtlı cihazların  gerçekleştirimidir.

         


             Biz bu yazıda "Mobile phones & entry-level PDAs" kısmıyla ilgilenıcez.Bu alanda gördüğünüz üzere KVM diye bir kavram var.Peki ne demektir KVM önce onu açıklayalım.KVM ; açılımı  Kuali VM olup,küçük cihazlar için optimize edilmiş java sanal makinesine verilen isimdir.
            Bu tanımlamalardan sonra yavaş yavaş uygulama kısmına geçelim.Öncelikle bir kavramdan daha bahsetmek istiyorum : Midlet. Midlet ; mobil cihazlar için yazılmış java uygulamalarına verilen isimdir. Midlet oluşturmak için  Netbeans  gibi bir IDE kullanabileceğimiz gibi  Java Wireless Toolkit gibi bir araç da kullanabiliriz.Yalnız burada dikkat etmemiz gereken JWTK nın bir IDE olmayışıdır.Yani Netbeans le otomatik yapılan işlemler JWTK de elle komut satırından yapılır.Tabi bir midletin nasıl yaratıldığını ve çalıştırıldığını aşama aşama görmek istiyorsanız bu araçla çalışabilirsiniz.http://www.mobilpro.com/makaleler/JAD_JAR_files/JAD_JAR_files.html adresinde bu aşamalar çok güzel bir şekilde anlatılmış.Ben buradaki uygulamada Netbeans'in son sürümü olan Netbeans 6.9 u kullandım.Uygulamamızın amacı Midlet yaratmayı öğrenmek olduğu için örneği oldukça basit tutmayı tercih ettim.Şimdi uygulamamıza geçelim:

             1.Programımızı açtıktan sonra File -> New Project diyerek proje türümüzü seçiyoruz.




2.Projemizin ismini ve konumunu belirliyoruz.                                                                 





3.Platform ve Device seçimlerimizi yapıyoruz.





4.Daha ayrıntılı şablon seçimimizi yapabiliyoruz.Ve Finish diyerek projemizi oluşturuyoruz.





5.Bu uygulamada amacımız (her dilde ilk uygulamamızda yaptığımız gibi:))ekrana "Hello J2ME World" yazdırmak olduğu için default olarak gelen text imizi değiştirmek için aşağıdaki ekranda "Screen" sekmesine tıklayarak cihazımızın ekran görüntüsünü açıyoruz.








6.Bu ekranda stringimizin textini sağ tarafta Properties'den "J2ME World :)" olarak değiştiriyoruz.





7.Artık projemizi derleyebiliriz.Çıktımız şu şekilde olacaktır:





Gördüğünüz gibi oldukça basit bi uyulama,zaten biz bişey yapmadık Netbeans saolsun bizim yerimize herşeyi otomatik yapıyor:) Peki  uygulamamızı bir de telefonumuz da çalıştırmak istersek ne yapmamız gerekiyor?Öncelikle çalştırılabilir dosyanın yani ".jar" dosyasının ve onun tanımlayıcı dosyası olan ".jad "dosyasının oluşturulması  gerekiyor.Netbeans bunu da oluşturuyor:)Ama bundan önce ".jar" ve ".jad" dosyaları tam olarak ne demek buna bi bakalım:

JAR :  Bir java uygulamasının sınıf dosyalarının ve uygulamanın çalışması için gerekli bütün dosyaların paketlenmesi ile oluşan çalıştırılabilir dosyadır.Bunların dışında JAR paketinde bir de "manifest.mf" isimli bir dosya vardır.Bu dosya JAR dosyasının içeriğini tanımlar.Yani içinde MIDlet-Name,MIDlet-Version,MIDlet-Vendor gibi değişkenler vardır.

    JAD : Bir java uygulamasının cihaza yüklenmeden önce cihazla uyumlu olup olmadığı,hafıza gereksinimi gibi kontrollerin yapılması gerekir.Aslında bu kontroller manifest dosyasıyla da yapılabilir ancak bunun için JAR dosyasının cihaza yüklenmesi ve açılması gerekir.Bu nedenle bu kontrolleri gerçekleştirmek için JAD dosyası oluşturulur.İçeriği manifest dosyasıyla aynıdır ancak manifest dosyası gibi JAR dosyasının içinde yer almaz.

 Jar dosyası projemizin klasörünün içinde "dist" klasörünün içinde bulunuyor.Bu dosyayı telefonumuza atıp uygulamayı yüklüyoruz.Daha sonra uygulamaya çift tıklayarak çalıştırdığımızda textimiz telefon ekranında gözüküyor. İşte bu kadaar:) Yalnız burada birşeyi hatırlatmam da yarar var projenizi eğer telefonda çalıştırmak istiyorsanız oluştururken telefonunuzla uyumlu olan Device Configuration ve Device Profile ı seçmeniz gerekiyor aksi takdirde uygulama telefonunuzda çalışmaz.Teefonunuzun desteklediği versiyonları öğrenmek için üstad Google'a "(telefonunuzun modeli) spec" yani Nokia N73 ise "Nokia N73 spec " diye sormanız yeterli oluyor.Son olarak Midletin çalışma mantığını daha iyi anlamak için aşağıdaki şekli inceleyelim :





Umarım faydalı bir yazı olmuştur.Bir başka yazıda görüşmek üzere...

Kaynaklar:
www.mobilpro.com
J2ME & M3G Sunusu - Oğuz Dönmez

 
Copyright © AYCAN GÖKDEMİR | Theme by BloggerThemes & frostpress | Sponsored by BB Blogging