Mega Code Archive

 
Categories / Java / J2ME
 

TextBox Shared ClipBoard

/*-------------------------------------------------- * SharedClipBoard.java * * A List component that can show one of two * textboxes. Each textbox shares a common clipboard * * Example from the book:     Core J2ME Technology * Copyright John W. Muchow   http://www.CoreJ2ME.com * You may use/modify for any non-commercial purpose *-------------------------------------------------*/ import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class SharedClipBoard extends MIDlet implements CommandListener {   private Display display;    // Reference to Display object   private List lsMain;       // Main list   private TextBoxCB tbClip1; // Textbox with clipboard     private TextBoxCB tbClip2; // Textbox with clipboard     private Command cmExit;    // Command to exit      public SharedClipBoard()   {     display = Display.getDisplay(this);     // Create list     lsMain = new List("ClipBoard Testing", List.IMPLICIT);      lsMain.append("TextBox1", null);     lsMain.append("TextBox2", null);          // Create the exit command, add to list     cmExit = new Command("Exit", Command.EXIT, 1);     lsMain.addCommand(cmExit);     lsMain.setCommandListener(this);          // Allocate textboxes          tbClip1 = new TextBoxCB("TextBox1", "Email Address:  john@corej2me.com", 50, TextField.ANY, this);     tbClip2 = new TextBoxCB("TextBox2", "Web Address:  www.", 50, TextField.ANY, this);   }          public void startApp()    {     showList();   }      public void pauseApp()   {   }         public void destroyApp(boolean unconditional)   {   }   public void showList()   {     // Display the list component     display.setCurrent(lsMain);   }      public void commandAction(Command c, Displayable s)   {     // If an implicit list generated the event     if (c == List.SELECT_COMMAND)     {       switch (lsMain.getSelectedIndex())       {         case 0:           // Display textbox 1           display.setCurrent(tbClip1);           break;            case 1:           // Display textbox 2                   display.setCurrent(tbClip2);           break;       }     }     else if (c == cmExit)     {       destroyApp(false);       notifyDestroyed();     }    } } /*-------------------------------------------------- * TextBoxCB.java *  * A textbox that includes a clipboard. This class * encapsulates all the commands necessary to show * a menu for mark, copy, cut and paste. * * Example from the book:     Core J2ME Technology * Copyright John W. Muchow   http://www.CoreJ2ME.com * You may use/modify for any non-commercial purpose *-------------------------------------------------*/ class TextBoxCB extends TextBox implements CommandListener {   private ClipBoard clipboard;  // The clipboard class   private Command cmBack;      // Command to go back   private Command cmStartMark; // Command to start marking a block      private Command cmCopy;      // Command to copy to clipboard      private Command cmCut;       // Command to cut to clipboard       private Command cmPaste;     // Command to paste into textbox   private SharedClipBoard midlet; // The midlet      public TextBoxCB(String title, String text, int maxSize, int constraints,                     SharedClipBoard midlet)   {     // Call the TextBox constructor     super(title, text, maxSize, constraints);          // Save reference to MIDlet so we can access its methods     this.midlet =  midlet;         // Create the Commands. Notice the priorities assigned     cmBack = new Command("Back", Command.BACK, 1);     cmStartMark = new Command("Mark", Command.SCREEN, 2);     cmCopy = new Command("Copy", Command.SCREEN, 3);     cmCut = new Command("Cut",  Command.SCREEN, 4);     cmPaste = new Command("Paste", Command.SCREEN, 5);          this.addCommand(cmBack);     this.addCommand(cmStartMark);     this.addCommand(cmCopy);     this.addCommand(cmCut);     this.addCommand(cmPaste);         this.setCommandListener(this);     // Create a clipboard     clipboard = new ClipBoard(this);   }      public void commandAction(Command c, Displayable s)   {     if (c == cmStartMark)     {       // Start to mark a block of text       clipboard.startMark();       }     else if (c == cmCopy)     {       // Copy text to clipboard       clipboard.copy();     }     else if (c == cmCut)     {       // Cut text to clipboard       clipboard.cut();                       }     else if (c == cmPaste)     {        // Paste from clipboard to textbox       clipboard.paste();     }     else if (c == cmBack)     {       // Return to the list component       midlet.showList();     }   } } /*-------------------------------------------------- * ClipBoard.java * * Core clipboard code -  mark, copy, cut and paste * * Example from the book:     Core J2ME Technology * Copyright John W. Muchow   http://www.CoreJ2ME.com * You may use/modify for any non-commercial purpose *-------------------------------------------------*/ class ClipBoard {   //--------------------------------------------------   // Allocate clipboard. Note, both clipboard & count   // of characters are shared across all instances   //--------------------------------------------------   private static char[] _clipBoard = new char[1000];   private static int _clipBoardCount = 0;      private int beginOffset = 0;  // The start index of copy   private TextBox tb = null;   // textbox for this instance   /*--------------------------------------------------   * Hold reference to textbox that created clipboard   *-------------------------------------------------*/     public ClipBoard(TextBox textbox)   {     tb = textbox;   }   /*--------------------------------------------------   * Set starting point of copy   *-------------------------------------------------*/     public void startMark()   {     beginOffset = tb.getCaretPosition();   }   /*--------------------------------------------------   * Copy text into the clipboard   *-------------------------------------------------*/     public void copy()   {     copy2clipboard();   }   /*--------------------------------------------------   * Copy text into the clipboard. If successful copy,   * delete text from the textbox.   *-------------------------------------------------*/     public void cut()   {     if (copy2clipboard())       tb.delete(beginOffset, tb.getCaretPosition() - beginOffset);   }   /*--------------------------------------------------   * Do the actual copy into the clipboard   *-------------------------------------------------*/   private boolean copy2clipboard()   {     // Can only mark (copy/cut) going forward     if (tb.getCaretPosition() > beginOffset)     {       // Allocate an array to hold the current textbox contents       char[] chr = new char[tb.size()];              // Get the current textbox contents       tb.getChars(chr);       // The count of characters in the clipboard             _clipBoardCount = tb.getCaretPosition() - beginOffset;              // Copy the text into the clipboard       // arraycopy(source, sourceindex, dest, destindex, count)       System.arraycopy(chr, beginOffset, _clipBoard, 0, _clipBoardCount);       return true;     }     else       return false;       }        /*--------------------------------------------------   * Paste text from clipboard into the textbox    *-------------------------------------------------*/     public void paste()   {     // Make sure the paste will not overrun the textbox length     if ((tb.size() + _clipBoardCount) <= tb.getMaxSize())       tb.insert(_clipBoard, 0, _clipBoardCount, tb.getCaretPosition());   } }