Saturday, November 19, 2011

J2ME සඳහා අතුරුමුහුණත් සැකසීම (Alert View)

J2ME සඳහා අපි පසුගිය ලිපිවලින් ප්‍රවේශයක් ලබාගත්තා. අපි මින් ඉදිරියට බලමු J2ME සඳහා අතුරුමුහුණත් සකසන අන්දම. මුලින්ම අපි සලකා බලමු Alert class එක පිලිබදව. අපිට Alert class එක හමුවනුයේ javax.microedition.lcdui පැකේජය තුලදීය. එහි ස්වරූප කිහිපයක් ඇත අවස්ථානුකූලව අපට ඒ ඒ අන්දමින් Alert object සාදා භාවිතාකිරීමට එම නිසා හැකියාව ඇත. Alert එකක විවිධ ස්වරූපයන් AlertType class එක තුල define කර තිබේ. අපි දැන් බලමු J2ME හිදී සරල Alert එකක් පෙන්වන ආකාරය.

import java.io.IOException;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.*;

/**
 * @author Kanishka
 */
public class MidletGUIDEmo extends MIDlet implements CommandListener{
    Form frm;
    Alert alert;
    Command exitCmd;
    

    public MidletGUIDEmo() throws IOException {
        frm=new Form("Alert Demo");
        Image img=Image.createImage("/Sri_Lanka.png");
        this.alert = new Alert("Access Granted!", "You have logged in succesfully!", img, AlertType.INFO);
        
        exitCmd=new Command("Exit", Command.EXIT, 0);
        frm.addCommand(exitCmd);
        frm.setCommandListener(this);
    }

    public void startApp() {
        frm.append(new String("This midlet demonstrates the Alert view and its attributes"));
        Display.getDisplay(this).setCurrent(frm);
        Display.getDisplay(this).setCurrent(alert);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable d) {
        if(c==exitCmd){
            destroyApp(false);
            notifyDestroyed();
        }
    }
}
Output:
    

දැන් අපි මෙහි ක්‍රියාකාරීත්වය වටහාගැනීමට උත්සාහ කරමු.

  • 1 සිට 10 වන පේලිය දක්වා ඇති import statement වලින් සිදුකෙරෙනුයේ අප භාවිතාකල J2ME specification එකට අයත් classes import කරගැනීමයි. 
  • අපගේ midlet class එකෙහි ආරම්භය 15 වන පේලියයි. එහි ඔබට පෙනනවා ඇති සාමාන්‍ය MidletGUIDEmo නම් අප විසින් define කර ඇති class එක MIDlet නම් class එකෙන් extend කර ඇති ආකාරය. යම් class එකක් midlet එකක ක්‍රියාකාරීත්වය දැක්වීමට නම් එය MIDlet නම් class එකෙහි subclass එකක් විය යුතුය. මෙහිදී භාවිතාවන්නේ inheritance නම් Object Oriented ගුණාංගයයි. inheritance පිලිබඳ වැඩිදුර දැනගැනීම පිණිස පසුගිය inheritance පාඩම සඳහා මෙතනින් පිවිසෙන්න. 
  • 15 පේලියේ CommandListener නම් interface එක implement කරන බව දක්වා ඇත්තේ මෙම වැඩසටහනේ command event handle කිරීමට අපවිසින් සැලසුම් කර ඇති නිසයි. CommandListener එක implement කරන නිසා public void commandAction(Command c, Displayable d) නම් method එක අපට සම්පූර්ණ කිරීමට සිදුවේ. මෙහිදී සිදුවන්නේ event handling කිරීමකි. 
  • MidletGUIDEmo හි constructor එකේදී 22 පේලියේ අප විසින් frm නමින් Form object එකක් සාදා තිබේ. එමගින් සිදුවන්නේ අපගේ වැඩසටහනට මුහුණතක් නිර්මාණය කිරීමට පසුබිම සැලසීමයි.
  • 24 පේලියේදී අප විසින් Alert object එක සෑදීම සිදුවේ. එහිදී පළමුවෙනි parameter එක සඳහා Alert එකෙහි title එකද, 2 වන parameter එක සඳහා Alert එකෙහි අපි පෙන්වන පණිවුඩයද, 3 න් වන parameter එක සඳහා Alert එකෙහි image එකක් අන්තර්ගත කරන්නේ නම් එම Image object එකද image එකක් පෙන්වන්නේ නැතිනම් ඒ වෙනුවට null යෙදිම සිදුකලයුතුය , 4 වන parameter එක සඳහා alert එකෙහි type එකද දැක්වීම සිදුවේ. 
 Alert type ආකාර පහත පරිදි වේ.
  • ALARM
  • CONFIRMATION
  • ERROR
  • INFO
  • WARNING
  • 26 පේලියේදී අප විසින් සිදුකරනුයේ exitCmd නමින් Command Object එකක් සාදාගැනීමයි. එහි 27 පේලියේදී එම සාදාගත් command එක අප විසින් සාදාගත් Form object එකට සම්බන්ද කරගැනීම සිදුකර තිබේ. 28 වන පේලියේදී සිදු කරනුයේ Form එකට CommandListener එක set කිරීමයි. එහිදී අප විසින් CommandListener එකක් ලෙස දක්වා ඇත්තේ this යන්නයි. එසේ කිරීමට අපට හැකියාවක් ලැබුනේ අපගේ midlet class එක CommandListener එක implement කර තිබීම නිසයි.
  • 31 පේලියේ තිබෙන්නේ app එක ක්‍රියාත්මක වන අවස්ථාවේ සිදුවිය යුතු කාර්‍යභාරයයි. එහිදී අපි Form object එකට String object එකක් එකතු කිරීම සිදුවේ. 2 වන රූපෙයෙන් පෙනෙන්නේ එම form එකයි.
  • 33 පේලියෙන් සිදුකරනුයේ අප සාදාගත් form object එක දිස්වීමට සැලැස්වීමයි  ඒ සඳහා lcdui පැකේජයේ ඇති Display class එක යොදාගෙන current display instance එක ලබාගැනේ. ඉන්පසු  current display instance එක ලෙස form object එක set කිරීම සිදුවේ
  • 34 පේලියෙන් අප විසින් form object එක set කල වහාම අප සාදාගත් alert object එක දිස්වීමට සලස්වයි එම නිසා මෙම වැඩසටහන ක්‍රියාත්මක කිරීමේදී අපට මුලින්ම දැකගැනීමට හැකිවන්නේ form එක නොව alert එකයි. alert එකෙන් ඉවත් වූ පසු ඊට පෙර තිබූ form එක නැවත දිස්වීම සිදුවේ.
  • 43 සිට 48 දක්වා ඇත්තේ event handling සඳහා අදාල කොටසයි. එහිදී ලබාදුන් command එක කුමක්ද යන්න if statement යොදාගැනීමෙන් සොයාබැලේ. මෙම වැඩසටහනට අදාලව සිදුව ඇත්තේ ලබාදුන් command එක exit command එකද යන්න පරීක්ෂාකිරීමකි.
ඉහත අප විසින් ලබාගත් දැණුම උපයෝගී කරගෙන දැන් අපි බලමු confirmation dialog එකක් Alert class එක උපයෝගී කරගෙන සකසාගන්නා අන්දම. 
මේ සඳහා අප විසින් කල යුත්තේ ඉහත ආකාරයටම Alert එකක් සකසාගෙන එයට Yes, No වැනි command 2 ක් add කර එම command handle කිරීමට command listener එකක් යෙදීමයි. අපි දැන් බලමු මෙය සිදුරගන්නේ කොහොමද කියල.
import java.io.IOException;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.*;

/**
 * @author Kanishka
 */
public class MidletGUIDEmo extends MIDlet implements CommandListener{
    Form frm;
    Alert alert;
    Command exitCmd;
    Command yesCmd,noCmd;
    

    public MidletGUIDEmo() throws IOException {
        frm=new Form("Alert Demo");
        Image img=Image.createImage("/qs.png");
        alert = new Alert("Confirmation!", "Are you a student?", img, AlertType.WARNING);

        //adding commands to the alert
        yesCmd=new Command("Yes", Command.ITEM, 1);
        noCmd=new Command("No", Command.ITEM, 1);
        alert.addCommand(yesCmd);
        alert.addCommand(noCmd);
        //set the command listener to the Alert object
        alert.setCommandListener(this);

        //adding a command to the form
        exitCmd=new Command("Exit", Command.EXIT, 0);
        frm.addCommand(exitCmd);
        frm.setCommandListener(this);
    }

    public void startApp() {
        frm.append(new String("This midlet demonstrates the Alert view and its attributes"));
        Display.getDisplay(this).setCurrent(frm);
        Display.getDisplay(this).setCurrent(alert);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable d) {
        if(c==exitCmd){
            destroyApp(false);
            notifyDestroyed();
        }else if(c==yesCmd){
            Display.getDisplay(this).setCurrent(frm);
            frm.append(new String("\nYou are a student"));
        }else if(c==noCmd){
            Display.getDisplay(this).setCurrent(frm);
            frm.append(new String("\nYou are not a student"));
        }
    }
}
 


මෙහිදී අපි 18 , 19 පේලි 2 හිදි command 3 ක් declare කර තිබෙනවා exitCmd එක form එකටද yesCmd, noCmd දෙක alert එකටද පිලිවෙලින් 37 , 30 , 31 පේලි වලදී යොදා තිබෙනවා. 

53 sita 64 දක්වා ඇත්තේ අප විසින් එකතු කරන ලද command සදහා කර ඇති event handling කේත කොටසයි.
මෙහිදී form එක සහ alert එකට වෙන වෙනම listeners නොයොදා එකම listener එකකින් එනම් midlet එක implement කර ඇති listener එකෙන්ම form එකට සහ alert එකට සම්බන්ද command අදාල කේතයන් සිදුකර තිබෙනවා. 

මෙය එතරම් හොඳ practice එකක් නොවන බව බැලූ බැල්මටම ඇතමෙක්ට හිතෙන්න පුලුවන්. ඒ වෙනුවට alert එකට වෙනම listener එක්ද form එකට වෙනම listener එක්ද යෙදුවේනම් වැඩසටහනෙහි readability එක වැඩිවන බව පෙනුනත් අප මෙහිදී විශේෂයෙන්ම සලකා ඇත්තේ වැඩසටහනෙහි performance එකයි. listener එකක්  background thread එකක ක්‍රියාකාරීත්වය දක්වයි. එමනිසා listener ගණනාවක් යෙදීම හැකිතාක් අඩුකරගත යුතුය. listener එකක් ධාවනය වීමට allocate වනුයේ ජංගම දුරකතනයක resources නිසා අප  desktop application එකක මෙන් නොව මෙහිදී listeners පිලිබඳ විශේෂ සැලකිල්ලක් දැක්විය යුතුවේ.

අපි ඊලඟ පාඩමෙන් අනෙකුත් J2ME GUI classes පිලිබඳ සලකා බලමු.

12 comments:

  1. නියමයි මචන් දිගටම කරගෙන යන්න. මමත් අසාවෙන් හිටියෙ ජාවා වලට.

    ReplyDelete
  2. Aluth post 1k enakam balagena hitiye.Jaya wewa!!!!

    ReplyDelete
  3. නියමයි අය්යෙ දිගටම කරන්න අපි බලන්න එනවා.ඊළග පාඩමත් ඉක්මනටම දෙන්න.

    ReplyDelete
  4. දිගටම ලියන්න. හො‍දට තේරෙනවා.......
    අයියේ මම ගොඩක් ආසයි C++ වලට. internet එකේ තියන tutorial ඉංග්‍රීසියෙන් තියෙන්නෙ. සමහර දේවල් තේරුම් ගන්න බෑ. ඔයා දන්න පොතක් එහෙම තියනවද සිංහලෙන් තියන.

    ReplyDelete
  5. @Anonymous,
    යම් කෙනෙක් සිංහලෙන් ලියපු පොතක් තිබුනා PDF එකක්. සොයාගන්න පුලුවන් වුනොත් ලින්ක් එක දාන්නම් මල්ලි.

    C++ ඉගෙනගන්න මෙතන
    http://www.cplusplus.com/doc/tutorial/
    හොද තැනක් මල්ලි. කරගෙන යන්න. ගැටලු තිබුනොත් අහන්න.

    ReplyDelete
  6. gadaka wadagath dawal egana gattha thanks a lot

    ReplyDelete
  7. මධුෂාන් අමරසිංහOctober 18, 2013 at 8:28 PM

    මම ඔයාගේ ජාවා ලිපි ඔක්කොම කියෙවිවා. එවා නියමයි. PCJT එකේ programing course එකට ලක්ෂ 6 විතර යනවා. ලංකාවෙ දූප්පත් කෙල්ලෝ කොල්ලන්ට එ වගේ තැන් වලින් ඉගෙන ගන්න බෑ. ඔයා ‍මෙ කරන්නේ ඇත්තටම හොද දෙයක්. ඔයාගේ blog එකේ google adsence එකක්වත් නැ. එකෙන් පැහැදිලි වෙන්නේ ඔයා පරාර්ථකාමිත්වයෙන් වැඞ කරන බව.ලංකාවට ඔයා වගේ කොල්ලො වටිනවා. දිගටම blog එක ලියන්න. අපි බලාගෙන ඉන්නවා

    ReplyDelete
  8. ඔබ සැම දෙනාගේම දිරිගැන්වීම පිලිබඳ බොහෝම ස්තුතියි!

    ReplyDelete
  9. ayye digatama liyanna.puluwan nam c++,phython,VB languages walatat sinhalen lessons denna..bohoma pin me java lessons walata.idiri padam tikat ikmanatama digatama denna puluwannam..

    ReplyDelete
  10. excellent!!.data 1k insert karama me widiyata alert1k end hadanne kohomada(notification1k wage).ex:system1en employee kenek leave1k ganna request1k dammoth eka adminta new notification 1k widiyata pennanda wage

    ReplyDelete
  11. sir ithuru padam tikath ikmanatama denna

    ReplyDelete