J2ME Java

/*--------------------------------------------------
* 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());
  }
}