1 / 38

Lecture 6

Lecture 6. Adding HTML to JButtons and JLabels. Getting the right cursor Data Transfer Cut and Paste, System Clipboard Gestures Drag and Drop Drag ‘n’ Drop with Unix A desktop icon class. HTML-aware components.

moral
Télécharger la présentation

Lecture 6

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lecture 6 • Adding HTML to JButtons and JLabels. • Getting the right cursor • Data Transfer • Cut and Paste, System Clipboard • Gestures • Drag and Drop • Drag ‘n’ Drop with Unix • A desktop icon class

  2. HTML-aware components • Can use HTML text mark-up with many Swing components now. Examples: multi-line labels, more fonts, formatting and styles. • Warning: bad HTML will cause exceptions. Feature still almost undocumented (Sun’s web page). • Believed to work with JLabel, JButton, JMenuItem, JMenu, JCheckBoxMenuItem, JRadioButtonMenuItem, JTabbedPane, JToolTip. JOptionPane too.

  3. Uses • Can split large labels into several lines. • Documentation/Help options. Can make HTML docs, and also view them from within the program. Hyperlinks are displayed but not active. • Unfinished feature. You still have to insert your own line-breaks, and implement your own hypertext support.

  4. Pointing devices • User normally thinks of pointer as hand-held tool, or even an extension of his/her body. Usually, but not always, controlled by mouse, which moves wherever user moves hand. • Used to allow user to specify a Location and a desired Action. • “gestures” such as drag, double-click.

  5. The right cursor • “Cursor” refers to the on-screen image used to help user position pointer. • Cursor appearance should reflect pointer usage. This may change frequently. • Java provides 14 system-independent cursors. OS may provide more. Can also build your own.

  6. Cursors in AWT • Each component can choose its cursor (Component.setCursor), or inherit from its parent. Cursor appearance changes when pointer enters component. • Cursor consists of an Image and a “hotspot” (relative pointer location).

  7. Built-in cursorsCustom cursors

  8. Setting component cursor // Create a new JButton with a custom cursor // “myCursor”. JButton b=new JButton(text); Image im=new ImageIcon(“myFile.gif”).getImage(); // Note: the above is the shortest way to load an // image from file. Many other methods exist. Point hotspot=new Point(0,15); // This sets hotspot at center of left edge // (assuming a 32x32 image) String name=“myCursor”; b.setCursor(b.getToolkit().createCustomCursor(im,hotspot,name));

  9. Transparency • With most image formats, it is possible to mark at least one color as “transparent.” One use: although images are stored as rectangles, can make them appear to be other shapes. • For cursors, this is the norm. • Can also make transparent buttons.

  10. Translucency • There is an even more advanced technique called alpha-compositing, in which every pixel of an image is assigned a number representing its translucency. This is likely to become more common in the future. I’ll come back to this when I discuss Java2D, another day.

  11. Data Transfer • Internal: between Objects • Between JVM’s: (rather easy with Serialization or RMI) • via the OS: to/from Clipboard • via the OS: Drag and Drop

  12. Data Flavors • Data comes in many formats. • Format unknown  data unusable • Makes sense to keep a label on data describing the format. • MIME types are the de-facto internet standard. Java’s DataFlavor class is a slight extension to MIME.

  13. MIME • Multipurpose Internet Mail Extensions format. e-mail, http “Content-type” • “type/subtype” • A proposed standard: RFC 2912, 2913. • Examples: text/plain, image/jpeg, image/gif, audio/basic, video/mpeg, application/x-java-serialized-object, model/vrml, text/rtf, multipart/signed

  14. What’s in a flavor? A drama in 6 slides Meet the cast: Hi, I am Mysterio, an instance of a class implementing the Transferable interface. Hi, I’m Jo Java. I want to get cool stuff from Mysterio. And I want it now, now, now!

  15. What’s in a flavor? Mysterio, what cool stuff do you have? Haha, not so fast my dear! I’ll only tell you if you invoke the right methods (wink, wink)! Scum! Give me what I want now! mysterio.getTransferDataFlavors();

  16. What’s in a flavor? Ouch, you win! I have cool stuff in the following flavors: “text/html”, “application/powerpoint”, “text/rtf”, “image/jpeg” Quick, give me the “image/jpeg”. Um, I mean: mysterio.getTransferData(jpegFlavor);

  17. What’s in a flavor? OK! Here’s an Object “representing” the data you requested. Bye! ???

  18. What’s in a flavor? Oh, no! Not a “black box!” This thing is supposed to represent a JPEG? Object How am I supposed to put this on screen?

  19. What’s in a flavor? Object Wait, the DataFlavor for “image/jpeg” tells me the class of this Object. jpegFlavor.getRepresentationClass(); It’s an InputStream. How quaint. Now I can read the JPEG file from this stream, and try to display it.

  20. Epilogue But Transferables from other applications are usually represented by a java.io.InputStream These take more work. Object Usually, when Transferables come from within Java programs, they include a DataFlavor obtained by new DataFlavor(Class.forName(String),String); These are represented by a ready-to-use Java object

  21. Flavors ready for scooping: DataFlavor.stringFlavor DataFlavor.getTextPlainUnicodeFlavor() DataFlavor.javaSerializedObjectMimeType DataFlavor.javaFileListFlavor new DataFlavor(Class.forName(“mypackage.MyClass”), “My Neat-O Class”) new DataFlavor(MIMETypeString, HumanReadableString)

  22. Using the Clipboard • Pass Transferables to and from system Clipboard. The clipboard must be obtained with: Toolkit.getSystemClipboard() • Pasting: use theClipboard.getContents() to get a Transferable object. Then extract the DataFlavor you want as previously described.

  23. Clipboard: Cutting • When cutting, we are promising the system that we will make the clipboard material available until it is replaced by the user. The ClipboardOwner interface allows the OS to notify us when we can forget the clipboard contents. • Clipboard.setContents() method cuts. Must implement Transferable for this.

  24. Clipboard notes • Swing text components already support cut-and-paste to system clipboard. Often this is enough. • Can also have local clipboards. Useful if you want more persistence and don’t wish to allow data exchange with other programs.

  25. Gestures A gesture is a high-level input event comprising a series or combination of several low-level mouse events. Can convey complicated information more easily than low-level mouse events.

  26. Gestures are: • information-rich • natural to the user • subject to misinterpretation/misinput • common to many tasks (even a language in themselves) • not necessarily natural to the UI • culture-specific

  27. Gestures in Java • Java does not have a “Gesture” class. • Does have an extremely powerful mechanism for handling “drag gestures” • Supports drag-and-drop between components, objects, even non-Java applications. • Useful for moving, copying, linking, etc.

  28. Package java.awt.dnd • On drag end: must set up DragSource, DragGestureListener, DragSourceListener • On drop end: must set up DropTarget, DropTargetListener • A successful drop gives the DropTargetListener a reference to a Transferable Object. See java.awt.datatransfer

  29. Initialization Source Component Target Component DragSource DragSourceListener DropTargetListener DropTarget DragGestureListener DragSourceContext The AWT Implementation (System specific) DragSourceContextPeer

  30. Flow of Events Source Component Target Component DragSource DragSourceListener DropTargetListener DropTarget DragGestureListener DragSourceContext The AWT Implementation (System specific) DragSourceContextPeer

  31. DND within Java

  32. DND recipe • Obtain a reference to a drag source with DragSource.getDefaultDragSource() or by instantiating a new one -- for example, new DragSource() . • Create a drag gesture recognizer with the drag source from step 1 by invoking DragSource.createDefaultDragGestureRecognizer(). The method is passed the component where the drag originates. • Wrap the data to be dragged in a transferable.

  33. DND Recipe part II 4. Initiate a drag when the drag gesture recognizer from step 2 is notified by invoking DragSource.startDrag() for the drag source from step 1. The transferable from step 4 is passed to the startDrag() method. 5. Handle the drop by implementing the DropTargetListener interface. 6. Implement the DragSource interface (often with empty methods).

  34. Click gestures • Instead of associating a single command to a button, can associate two or more. For instance, left-click, right-click, double-click, shift-click, alt-click, left-and-right-click, etc. However, Java doesn’t support this well. • Can recognize double-clicks using MouseEvent.getClickCount() method.

  35. Windows 2000 clicks

  36. Windows 2000 drags

  37. DND Reading • DND Fundamentals (Geary, Sun) • Intro, part 1 (Javaworld) • Intro, part 2 (Javaworld) • Sun’s DND trail (minimal) • DND Links (esus) • JFC in a Nutshell, Chapter 6. • Data Transfer API (Javaworld)

  38. Creating a DesktopIcon class • Desktop icons represent files. Their transferable content is most naturally represented internally by the File class. Externally by DataFlavor.javaFileListFlavor. • Set up DND. Ordinary files have dragsources. Directories have dragsources and dragtargets for MOVE and COPY.

More Related