/[classpath]/classpath/examples/gnu/classpath/examples/datatransfer/Demo.java
ViewVC logotype

Diff of /classpath/examples/gnu/classpath/examples/datatransfer/Demo.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1.2.1 by gnu_andrew, Tue Aug 16 16:22:35 2005 UTC revision 1.1.2.2 by gnu_andrew, Sat Sep 10 15:31:35 2005 UTC
# Line 30  import java.util.Arrays; Line 30  import java.util.Arrays;
30  import java.util.Iterator;  import java.util.Iterator;
31  import java.util.Random;  import java.util.Random;
32    
33    /**
34     * An example how datatransfer works for copying and pasting data to
35     * and from other programs.
36     */
37  class Demo  class Demo
38    extends Frame    extends Frame
39    implements ActionListener    implements ActionListener, ItemListener, FlavorListener
40  {  {
41    public static void main(String args[])    public static void main(String args[])
42    {    {
# Line 55  class Demo Line 59  class Demo
59    private Button copyFiles;    private Button copyFiles;
60    private Button pasteFiles;    private Button pasteFiles;
61    
62      private FlavorsComponent flavors;
63      private FlavorDetailsComponent details;
64    
65    private Demo()    private Demo()
66    {    {
67      super("GNU Classpath datatransfer");      super("GNU Classpath datatransfer");
68      setLayout(new GridLayout(4, 1, 5, 5));  
69        /* Add all the different panel to the main window in one row. */
70        setLayout(new GridLayout(5, 1, 10, 10));
71      add(createTextPanel());      add(createTextPanel());
72      add(createImagePanel());      add(createImagePanel());
73      add(createObjectPanel());      add(createObjectPanel());
74      add(createFilesPanel());      add(createFilesPanel());
75        add(createFlavorsPanel());
76    
77        /* Add listeners for the various buttons and events we are
78           interested in. */
79      addWindowListener(new WindowAdapter ()      addWindowListener(new WindowAdapter ()
80        {        {
81          public void windowClosing (WindowEvent e)          public void windowClosing (WindowEvent e)
# Line 70  class Demo Line 83  class Demo
83            dispose();            dispose();
84          }          }
85        });        });
86        flavors.addItemListener(this);
87        Toolkit t = Toolkit.getDefaultToolkit();
88        Clipboard c = t.getSystemClipboard();
89        c.addFlavorListener(this);
90    
91        /* Show time! */
92      pack();      pack();
93      show();      show();
94    }    }
95    
96      /**
97       * The Text Panel will show simple text that can be copied and pasted.
98       */
99    private Panel createTextPanel()    private Panel createTextPanel()
100    {    {
101      Panel textPanel = new Panel();      Panel textPanel = new Panel();
102      textPanel.setLayout(new BorderLayout());      textPanel.setLayout(new BorderLayout());
103      text = new TextArea("GNU Everywhere!",      text = new TextArea("GNU Everywhere!",
104                          4, 40,                          2, 80,
105                          TextArea.SCROLLBARS_VERTICAL_ONLY);                          TextArea.SCROLLBARS_VERTICAL_ONLY);
106      text.setEditable(false);      text.setEditable(false);
107      text.setEnabled(true);      text.setEnabled(true);
# Line 96  class Demo Line 118  class Demo
118      return textPanel;      return textPanel;
119    }    }
120    
121      /**
122       * The Image Panel shows an image that can be copied to another
123       * program or be replaced by pasting in an image from another
124       * application.
125       */
126    private Panel createImagePanel()    private Panel createImagePanel()
127    {    {
128      Panel imagePanel = new Panel();      Panel imagePanel = new Panel();
# Line 116  class Demo Line 143  class Demo
143      return imagePanel;      return imagePanel;
144    }    }
145    
146      /**
147       * The Object Panel holds a simple (Point) object that can be copied
148       * and pasted to another program that supports exchanging serialized
149       * objects.
150       */
151    private Panel createObjectPanel()    private Panel createObjectPanel()
152    {    {
153      Panel objectPanel = new Panel();      Panel objectPanel = new Panel();
# Line 136  class Demo Line 168  class Demo
168      return objectPanel;      return objectPanel;
169    }    }
170        
171      /**
172       * The Files Panel shows the files from the current working
173       * directory. They can be copied and pasted between other
174       * applications that support the exchange of file lists.
175       */
176    private Panel createFilesPanel()    private Panel createFilesPanel()
177    {    {
178      Panel filesPanel = new Panel();      Panel filesPanel = new Panel();
# Line 153  class Demo Line 190  class Demo
190      return filesPanel;      return filesPanel;
191    }    }
192        
193      /**
194       * The Flavors Panel shows the different formats (mime-types) that
195       * data on the clipboard is available in. By clicking on a flavor
196       * details about the representation class and object is given.
197       */
198      private Panel createFlavorsPanel()
199      {
200        Panel flavorsPanel = new Panel();
201        flavorsPanel.setLayout(new BorderLayout());
202        Label flavorsHeader = new Label("Flavors on clipboard:");
203        Toolkit t = Toolkit.getDefaultToolkit();
204        Clipboard c = t.getSystemClipboard();
205        DataFlavor[] dataflavors = c.getAvailableDataFlavors();
206        flavors = new FlavorsComponent(dataflavors);
207        details = new FlavorDetailsComponent(null);
208        flavorsPanel.add(flavorsHeader, BorderLayout.NORTH);
209        flavorsPanel.add(flavors, BorderLayout.CENTER);
210        flavorsPanel.add(details, BorderLayout.SOUTH);
211        return flavorsPanel;
212      }
213    
214      /**
215       * FlavorListener implementation that updates the Flavors Panel
216       * whenever a change in the mime-types available has been detected.
217       */
218      public void flavorsChanged(FlavorEvent event)
219      {
220        Toolkit t = Toolkit.getDefaultToolkit();
221        Clipboard c = t.getSystemClipboard();
222        DataFlavor[] dataflavors = c.getAvailableDataFlavors();
223        flavors.setFlavors(dataflavors);
224        details.setDataFlavor(null);
225      }
226    
227      /**
228       * ItemChangeListener implementation that updates the flavor details
229       * whenever the user selects a different representation of the data
230       * available on the clipboard.
231       */
232      public void itemStateChanged(ItemEvent evt)
233      {
234        DataFlavor df = null;
235        String s = flavors.getSelectedItem();
236        if (s != null)
237          {
238            try
239              {
240                df = new DataFlavor(s);
241              }
242            catch (ClassNotFoundException cnfe)
243              {
244                cnfe.printStackTrace();
245              }
246          }
247        details.setDataFlavor(df);
248      }
249      
250      /**
251       * ActionListener implementations that will copy or past data
252       * to/from the clipboard when the user requests that for the text,
253       * image, object of file component.
254       */
255    public void actionPerformed (ActionEvent evt)    public void actionPerformed (ActionEvent evt)
256    {    {
257      Button b = (Button) evt.getSource();      Button b = (Button) evt.getSource();
# Line 216  class Demo Line 315  class Demo
315          Serializable o = null;          Serializable o = null;
316          try          try
317            {            {
318              o = (Serializable) c.getData              o = (Serializable) c.getData(ObjectSelection.objFlavor);
               (new DataFlavor(DataFlavor.javaSerializedObjectMimeType));  
319            }            }
320          catch (UnsupportedFlavorException dfnse)          catch (UnsupportedFlavorException dfnse)
321            {            {
# Line 228  class Demo Line 326  class Demo
326          catch (ClassCastException cce)          catch (ClassCastException cce)
327            {            {
328            }            }
         catch (ClassNotFoundException cnfe)  
           {  
           }  
329          if (o == null)          if (o == null)
330            t.beep();            t.beep();
331          else          else
# Line 263  class Demo Line 358  class Demo
358        }        }
359    }    }
360    
361      /**
362       * Simple awt component that shows an settable image.
363       */
364    static class ImageComponent extends Component    static class ImageComponent extends Component
365    {    {
366      private Image image;      private Image image;
367    
368      ImageComponent(Image image)      ImageComponent(Image image)
369      {      {
370        setSize(120, 120);        setSize(20, 20);
371        setImage(image);        setImage(image);
372      }      }
373    
# Line 290  class Demo Line 388  class Demo
388      }      }
389    }    }
390    
391      /**
392       * Simple awt component that shows a settable Serializable object.
393       */
394    static class ObjectComponent extends TextArea    static class ObjectComponent extends TextArea
395    {    {
396      private Serializable object;      private Serializable object;
397    
398      ObjectComponent(Serializable object)      ObjectComponent(Serializable object)
399      {      {
400        super("", 2, 40, TextArea.SCROLLBARS_NONE);        super("", 2, 80, TextArea.SCROLLBARS_NONE);
401        setEditable(false);        setEditable(false);
402        setEnabled(false);        setEnabled(false);
403        setObject(object);        setObject(object);
# Line 317  class Demo Line 418  class Demo
418      }      }
419    }    }
420    
421      /**
422       * Simple awt component that shows a settable list of Files.
423       */
424    static class FilesComponent extends List    static class FilesComponent extends List
425    {    {
426      private File[] files;      private File[] files;
427        
428      FilesComponent(File[] files)      FilesComponent(File[] files)
429      {      {
430        super(4, true);        super(4, true);
431        setFiles(files);        setFiles(files);
432      }      }
433        
434      File[] getFiles()      File[] getFiles()
435      {      {
436        String[] strings = getSelectedItems();        String[] strings = getSelectedItems();
437        if (strings == null || strings.length == 0)        if (strings == null || strings.length == 0)
438          return (File[]) files.clone();          return (File[]) files.clone();
439          
440        File[] fs = new File[strings.length];        File[] fs = new File[strings.length];
441        for (int i = 0; i < strings.length; i++)        for (int i = 0; i < strings.length; i++)
442          fs[i] = new File(strings[i]);          fs[i] = new File(strings[i]);
443        return fs;        return fs;
444      }      }
445        
446      void setFiles(File[] files)      void setFiles(File[] files)
447      {      {
448        this.files = files;        this.files = files;
449        removeAll();        removeAll();
450        for (int i = 0; i < files.length; i++)        for (int i = 0; i < files.length; i++)
451          {          {
452            addItem(files[i].toString());            addItem(files[i].toString());
453            select(i);            select(i);
454          }          }
455      }      }
456        
457      void setFiles(java.util.List list)      void setFiles(java.util.List list)
458      {      {
459        File[] fs = new File[list.size()];        File[] fs = new File[list.size()];
# Line 357  class Demo Line 461  class Demo
461        Iterator it = list.iterator();        Iterator it = list.iterator();
462        while (it.hasNext())        while (it.hasNext())
463          fs[i++] = (File) it.next();          fs[i++] = (File) it.next();
464          
465        setFiles(fs);        setFiles(fs);
466      }      }
467    }    }
468        
469      /**
470       * Simple awt component that shows a settable list of DataFlavors.
471       */
472      static class FlavorsComponent extends List
473      {
474        FlavorsComponent(DataFlavor[] flavors)
475        {
476          super(4);
477          setFlavors(flavors);
478        }
479    
480        void setFlavors(DataFlavor[] flavors)
481        {
482          removeAll();
483          for (int i = 0; i < flavors.length; i++)
484            {
485              addItem(flavors[i].getMimeType());
486            }
487        }
488      }
489    
490      /**
491       * Simple awt component that shows the details for and an object as
492       * found on the system clipboard as represented by a given
493       * DataFlavor.
494       */
495      static class FlavorDetailsComponent extends TextArea
496      {
497        private DataFlavor df;
498    
499        FlavorDetailsComponent(DataFlavor df)
500        {
501          super("", 2, 80, TextArea.SCROLLBARS_NONE);
502          setEditable(false);
503          setEnabled(false);
504          setDataFlavor(df);
505        }
506    
507        void setDataFlavor(DataFlavor df)
508        {
509          if (df == this.df
510              || (df != null && df.equals(this.df)))
511            return;
512    
513          this.df = df;
514    
515          if (df == null)
516            setText("No flavor selected");
517          else
518            {
519              Object o = null;
520              Throwable exception = null;
521              try
522                {
523                  Toolkit t = Toolkit.getDefaultToolkit();
524                  Clipboard c = t.getSystemClipboard();
525                  o = c.getData(df);
526                }
527              catch (Throwable t)
528                {
529                  exception = t;
530                }
531              if (o != null)
532                {
533                  setText("Data: " + o.getClass().getName()
534                          + "\n"
535                          + o);
536                }
537              else
538                {
539                  setText("Error retrieving: " + df
540                          + "\n"
541                          + exception != null ? exception.toString() : "");
542                }
543            }
544          repaint();
545        }
546      }
547    
548      /**
549       * Helper class to put an Image on a clipboard as
550       * DataFlavor.imageFlavor.
551       */
552    static class ImageSelection implements Transferable    static class ImageSelection implements Transferable
553    {    {
554      private final Image img;      private final Image img;
# Line 392  class Demo Line 579  class Demo
579      }      }
580    }    }
581    
582      /**
583       * Helper class to put an Object on a clipboard as Serializable
584       * object.
585       */
586    static class ObjectSelection implements Transferable    static class ObjectSelection implements Transferable
587    {    {
588      private final Serializable obj;      private final Serializable obj;
# Line 424  class Demo Line 615  class Demo
615      }      }
616    }    }
617    
618      /**
619       * Helper class to put a List of Files on the clipboard as
620       * DataFlavor.javaFileListFlavor.
621       */
622    static class FilesSelection implements Transferable    static class FilesSelection implements Transferable
623    {    {
624      private final File[] files;      private final File[] files;

Legend:
Removed from v.1.1.2.1  
changed lines
  Added in v.1.1.2.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26