HOY_ClipTextApp.java



//EJEMPLO DE COPIAR Y PEGAR
import java.awt.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.datatransfer.*;
import java.util.*;
import java.io.*;

public class ClipTextApp extends Frame {
 Font defaultFont = new Font("default",Font.PLAIN,12);
 int screenWidth = 400;
 int screenHeight = 400;
 Toolkit toolkit;
 int baseline;
 int lineSize;
 FontMetrics fm;
 Canvas canvas = new MyCanvas();
 Vector text = new Vector();
 int topLine;
 public static void main(String args[]){
  ClipTextApp app = new ClipTextApp();
 }
 public ClipTextApp() {
  super("ClipTextApp");
  setup();
  setSize(screenWidth,screenHeight);
  addWindowListener(new WindowEventHandler());
  show();
 }
 void setup() {
  setupMenuBar();
  setupFontData();
  text.addElement("");
  add("Center",canvas);
 }
 void setupMenuBar() {
  MenuBar menuBar = new MenuBar();
  Menu fileMenu = new Menu("File");
  Menu editMenu = new Menu("Edit");
  MenuItem fileExit = new MenuItem("Exit");
  MenuItem editCopy = new MenuItem("Copy");
  MenuItem editPaste = new MenuItem("Paste");
  fileExit.addActionListener(new MenuItemHandler()); 
  editCopy.addActionListener(new MenuItemHandler()); 
  editPaste.addActionListener(new MenuItemHandler()); 
  fileMenu.add(fileExit);
  editMenu.add(editCopy);
  editMenu.add(editPaste);
  menuBar.add(fileMenu);
  menuBar.add(editMenu);
  setMenuBar(menuBar);
 }
 void setupFontData() {
  setFont(defaultFont);
  toolkit = getToolkit();
  fm = toolkit.getFontMetrics(defaultFont);
  baseline = fm.getLeading()+fm.getAscent();
  lineSize = fm.getHeight();
 }
 public void paint(Graphics g) {
  canvas.repaint();
 }
 void copyToClipboard() {
  String toClipboard="Hello from Java!";
  StringSelection ss = new StringSelection(toClipboard);
  Clipboard clip=toolkit.getSystemClipboard();
  clip.setContents(ss,ss);
 }
 void pasteFromClipboard() {
  Clipboard clip=toolkit.getSystemClipboard();
  Transferable contents=clip.getContents(ClipTextApp.this);
  text.removeAllElements();
  if(contents==null) text.addElement("The clipboard is empty.");
  else{
   if(contents.isDataFlavorSupported(DataFlavor.stringFlavor)){
    try{
     String data = (String) contents.getTransferData(
      DataFlavor.stringFlavor);
     if(data==null) text.addElement("null");
     else{
      StringTokenizer st = new StringTokenizer(data,"\n");
      while(st.hasMoreElements()) text.addElement(st.nextToken());
     }
    } catch(IOException ex){
     text.addElement("IOException");
    } catch(UnsupportedFlavorException ex){
     text.addElement("UnsupportedFlavorException");
    }
   }else text.addElement("Wrong flavor.");
  }
  repaint();
 }
 class MenuItemHandler implements ActionListener {
  public void actionPerformed(ActionEvent ev){
   String s=ev.getActionCommand();
   if(s=="Exit"){
    System.exit(0);
   }else if(s=="Copy") copyToClipboard();
   else if(s=="Paste") pasteFromClipboard();
  }
 }
 class WindowEventHandler extends WindowAdapter {
  public void windowClosing(WindowEvent e){
   System.exit(0);
  }
 }
 class MyCanvas extends Canvas {
  public void paint(Graphics g) {
   topLine = 0;
   int numLines = text.size();
   screenHeight = getSize().height;
   int y = baseline*2;
   int x = y;
   for(int i = topLine;(i < numLines) && (y < screenHeight + lineSize);++i) {
    g.drawString((String) text.elementAt(i),x,y);
    y += lineSize;
   }
  }
 }
}