The Java Program: Main.java

  1 import java.awt.Toolkit;
  2 import java.awt.Event;
  3 import java.awt.event.*;
  4 import javax.swing.*;
  5 
  6 import java.awt.datatransfer.Clipboard;
  7 import java.awt.datatransfer.DataFlavor;
  8 import java.awt.datatransfer.Transferable;
  9 import java.awt.datatransfer.StringSelection;
 10 import java.awt.datatransfer.UnsupportedFlavorException;
 11 
 12 
 13 import java.util.Date;
 14 import java.util.Arrays;
 15 import java.io.IOException;
 16 
 17 public class Main extends JFrame {
 18 
 19    public static void main (String[] args) {
 20       final JFrame frame = new Main ();
 21       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 22       frame.pack();
 23       frame.setVisible(true);
 24    }
 25 
 26    private Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
 27 
 28    public Main() {
 29       final JTextArea ta = new JTextArea(10, 40);
 30       getContentPane().add(new JScrollPane(ta));
 31 
 32       final JMenuBar bar = new JMenuBar();
 33       JMenu menu = new JMenu ("Edit");
 34       menu.setMnemonic ('E');
 35       JMenuItem cut   = new JMenuItem ("Cut");
 36       cut.setMnemonic ('T');
 37       cut.setAccelerator (KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.CTRL_MASK));
 38 
 39       JMenuItem copy  = new JMenuItem ("Copy");
 40       copy.setMnemonic('C');
 41       copy.setAccelerator (KeyStroke.getKeyStroke(KeyEvent.VK_C, Event.CTRL_MASK));
 42 
 43       /*
 44         "Copy" button:  Put current date/time to clipboard
 45       */
 46       class BL implements ActionListener {
 47          public void actionPerformed (ActionEvent ev) {
 48             final StringSelection ss = new StringSelection (new Date (). toString());
 49             cb.setContents (ss, ss);
 50             ta.append ("Adding string to clipboard");
 51             ta.append ("\n");
 52             ta.append ("  Clipboard owner:  " + cb.getName());
 53             ta.append ("\n");
 54             ta.append ("  String contents:  " + ss);
 55             ta.append ("\n\n");
 56          }
 57       }
 58       copy.addActionListener (new BL ());
 59 
 60       /*
 61         "Paste" button:  Show contents of clipborad
 62       */
 63       JMenuItem paste = new JMenuItem ("Paste");
 64       paste.setMnemonic('P');
 65       paste.setAccelerator (KeyStroke.getKeyStroke(KeyEvent.VK_V, Event.CTRL_MASK));
 66       class AL implements ActionListener {
 67          public void actionPerformed (ActionEvent ev) {
 68             final Transferable t = cb.getContents(this);
 69             if (t==null) {
 70                ta.append ("Clipboard is empty!\n");
 71                return;
 72             }
 73             ta.append ("Clipboard owner:  " + cb.getName());
 74             ta.append ("\n");
 75             final DataFlavor [] flavors = t.getTransferDataFlavors();
 76             if (flavors==null) {
 77                ta.append ("No flavors!\n");
 78                return;
 79             }
 80             for (int i=0; i<flavors.length; i++) {
 81                ta.append ("("+i+") DataFlavor:  " + flavors[i].getHumanPresentableName());
 82                ta.append ("\n");
 83                ta.append ("  MIME type:  " + flavors[i].getMimeType());
 84                ta.append ("\n");
 85                ta.append ("  Java class:  " + flavors[i].getRepresentationClass());
 86                ta.append ("\n");
 87                try {
 88                   ta.append ("  Contents:  " + t.getTransferData(flavors[i]).toString());
 89                   ta.append ("\n");
 90                } catch (UnsupportedFlavorException e) {
 91                   ta.append ("Not supported\n");
 92                } catch (IOException e) {
 93                   ta.append ("IOException\n");
 94                }
 95             }
 96             ta.append ("\n");
 97          }
 98       }
 99       paste.addActionListener (new AL ());
100 
101       menu.add (cut);
102       menu.add (copy);
103       menu.add (paste);
104       bar.add (menu);
105       setJMenuBar (bar);
106    }
107 }