blueMarine
Or Why You Should Really Ship Swing
Applications
Fabrizio Giudici, Senior Java Architect, Tidalwave s.a.s.

TS-...
Talk about issues with Java™ platform's Rich
Client Applications; enumerate and introduce
solutions from the perspective o...
Agenda

 Introduction
 NetBeans™ Software RCP
 Visual Library
 GeoSpatial Components
 Java Platform Imaging APIs
 Conclusi...
blueMarine introductory video




                            2008 JavaOneSM Conference | java.sun.com/javaone |   4
Speaker’s Qualifications

  Senior Java Architect with 12 years of Java platform
  experience
  Project leading, mentoring...
Java Platform on the Desktop: Readiness Phases

 Phase -1: prior 2005
  • Slow, poorly integrated, ugly L&F
 Phase 0: 2005...
Java Platform on the Desktop: Readiness Phases

 Phase -1: prior 2005
                               blueMarine 0.8
  • Sl...
Java Platform on the Desktop: Readiness Phases

 Phase -1: prior 2005
                               blueMarine 0.8
  • Sl...
Problems




           2008 JavaOneSM Conference | java.sun.com/javaone |   9
Solutions




            2008 JavaOneSM Conference | java.sun.com/javaone |   10
If you can just remember four points

  NetBeans Software RCP
  NetBeans Visual Library
  SwingLabs
  NASA World Wind for ...
OpenBlueSky

 Where generic stuff spins off blueMarine
 Can be used for other applications
 Consolidated stuff going to Pl...
Agenda

 Introduction
 NetBeans Software RCP
 Visual Library
 GeoSpatial Components
 Java Platform Imaging APIs
 Conclusio...
Question

 What do you expect from a (desktop) framework?




                                     2008 JavaOneSM Conferen...
Desktop Frameworks

 Solid foundation to base your application on
 APIs working together, well tested
 Service discovery a...
Swing is not a framework

 Missing sophisticated components
  • e.g.: date picker, tree+table, etc...
 Neither service dis...
What is NetBeans Software RCP?




   NetBeans   {   NetBeans IDE
                  NetBeans RCP


                       ...
What is NetBeans Software RCP?




   NetBeans   {   NetBeans IDE
                  NetBeans RCP


                       ...
What is NetBeans Software RCP?




   NetBeans   {   NetBeans IDE
              NetBeans RCP
   Your Desktop Application

...
NetBeans Software RCP

 You start with a skeleton application
 You populate it
  • panels, views
  • actions, menus, toolb...
Most important NetBeans RCP APIs

 Actions               Modules
 DataObjects           Nodes
 Dialogs               Optio...
Explorers, Viewers, Actions




                              2008 JavaOneSM Conference | java.sun.com/javaone |   22
Lookup API

 Plays a fundamental role in many APIs
 Repository for a bag of objects
 Locator for services
 Fires events
 “...
DataObject represents a file-based entity




                                2008 JavaOneSM Conference | java.sun.com/jav...
You can extend DataObject




                            2008 JavaOneSM Conference | java.sun.com/javaone |   25
Creating a new DataObject
layer.xml:
<filesystem>
      <folder name="Services">
           <folder name="MIMEResolver">
 ...
Creating a new DataObject
public class PhotoDataObject extends MultiDataObject { ... }

public class PhotoDataLoader exten...
Lookup holds “capabilities”




                              2008 JavaOneSM Conference | java.sun.com/javaone |   28
Node “represents” DataObject




                               2008 JavaOneSM Conference | java.sun.com/javaone |   29
Node has “capabilities” too




                              2008 JavaOneSM Conference | java.sun.com/javaone |   30
Managing basic objects
File file = new File("photo.jpg");
FileObject fileObject = FileUtil.toFileObject(file);
DataObject ...
Representing sets of Nodes




                      




                             2008 JavaOneSM Conference | java.su...
View renders Nodes




                     2008 JavaOneSM Conference | java.sun.com/javaone |   33
Actions can be automatically enabled




                              2008 JavaOneSM Conference | java.sun.com/javaone | ...
Declaring Actions
<filesystem>
    <folder name="Actions">
        <folder name="Window">
             <file name="mypkg-C...
Declaring Actions
    <!-- Adds the actions to the Component toolbar. -->
    <folder name="Toolbars">
        <folder nam...
Example of context-sensitive Action
public class ShowPhotoAction extends CookieAction {
    protected void performAction(N...
Some points

 You don't need to always use everything
  • E.g. just Nodes, no DataObjects
  • Can use them “incrementally”...
NetBeans Software RCP stuff can be
extended
 What about a “cover flow” view?
 Use JOGL (Java Bindings for OpenGL) for fast...
CoverFlowView




                2008 JavaOneSM Conference | java.sun.com/javaone |   40
Update Centers

 NetBeans software components (.nbm)
  • can be added / removed on the fly
  • can declare dependencies
  ...
Update Centers




                 2008 JavaOneSM Conference | java.sun.com/javaone |   42
Agenda

 Introduction
 NetBeans Software RCP
 Visual Library
 GeoSpatial Components
 Java Platform Imaging APIs
 Conclusio...
Visual Library

  Support for graph-oriented modeling
   • Nodes
   • Arcs
   • Routing
   • Interaction
  Can be creative...
LightTable




             2008 JavaOneSM Conference | java.sun.com/javaone |   45
Agenda

 Introduction
 NetBeans Software RCP
 Visual Library
 GeoSpatial Components
 Java Platform Imaging APIs
 Conclusio...
JXMapViewer

 A generic 2D, tile-based map renderer
  • See Joshua Marinacci's blog
  • Retrieves tiles from the web
    (...
GeoViewer




            2008 JavaOneSM Conference | java.sun.com/javaone |   48
NASA World Wind for Java Platform

 Java platform version of NASA World Wind
  • 3D software that renders the Earth
  • NA...
GeoViewer 3D




               2008 JavaOneSM Conference | java.sun.com/javaone |   50
Agenda

 Introduction
 NetBeans Software RCP
 Visual Library
 GeoSpatial Components
 Java Platform Imaging APIs
 Conclusio...
Java Platform Imaging APIs

 Many options (and dispersive?)
  • Java 2D™ API, JAI, ImageJ, JMagick, JHLabs, ...
 Some too ...
Mistral: fix 'em up

  Imaging meta-framework
  Multiple APIs can
  be used together
  Simplifies APIs
  Supports multicor...
Some Mistral examples
File file = new File(...);
EditableImage image = EditableImage.create(new ReadOp(file, 0));
image.ex...
Agenda

 Introduction
 NetBeans Software RCP
 Visual Library
 GeoSpatial Components
 Java Platform Imaging APIs
 Conclusio...
Open Problems for blueMarine

 Java platform still misses something on the desktop
  • e.g. video streaming, USB support
 ...
Be efficient with innovation

  “Cool stuff„ often means complexity
   • Go quickly from idea to prototype
   • Integrate ...
Summary

 Most Swing showstoppers are history now




                                      2008 JavaOneSM Conference | ja...
Summary

 Most Swing showstoppers are history now
 You CAN ship desktop apps




                                      200...
Summary

 Most Swing showstoppers are history now
 You CAN ship desktop apps
 There's a world beyond Swing
  • SwingLabs, ...
Summary

 Most Swing showstoppers are history now
 You CAN ship desktop apps
 There's a world beyond Swing
  • SwingLabs, ...
Summary

 Most Swing showstoppers are history now
 You CAN ship desktop apps
 There's a world beyond Swing
  • SwingLabs, ...
Eclipse Optic Cleaning System




                                2008 JavaOneSM Conference | java.sun.com/javaone |   63
For More Information

 Links to projects, blogs and documentation
  • weblogs.java.net/blog/fabriziogiudici
  • bluemarine...
blueMarine
Or Why You Should Really Ship Swing
Applications
Fabrizio Giudici
TS-5483.                          Speaker’s l...
Upcoming SlideShare
Loading in...5
×

blueMarine Or Why You Should Really Ship Swing Applications

1,773

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,773
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

blueMarine Or Why You Should Really Ship Swing Applications

  1. 1. blueMarine Or Why You Should Really Ship Swing Applications Fabrizio Giudici, Senior Java Architect, Tidalwave s.a.s. TS-5483
  2. 2. Talk about issues with Java™ platform's Rich Client Applications; enumerate and introduce solutions from the perspective of a real project. “Java is mature for Rich Desktop Applications. Just look beyond Swing.” 2008 JavaOneSM Conference | java.sun.com/javaone | 2
  3. 3. Agenda Introduction NetBeans™ Software RCP Visual Library GeoSpatial Components Java Platform Imaging APIs Conclusion 2008 JavaOneSM Conference | java.sun.com/javaone | 3
  4. 4. blueMarine introductory video 2008 JavaOneSM Conference | java.sun.com/javaone | 4
  5. 5. Speaker’s Qualifications Senior Java Architect with 12 years of Java platform experience Project leading, mentoring, teaching Member of JUG Milano, NetBeans Software Dream Team Speaker at JavaPolis, Jazoon, JavaOneSM Event, JiniSM Meeting Writer for NetBeans Software Magazine, Mokabyte Blogger at Java.Net 2008 JavaOneSM Conference | java.sun.com/javaone | 5
  6. 6. Java Platform on the Desktop: Readiness Phases Phase -1: prior 2005 • Slow, poorly integrated, ugly L&F Phase 0: 2005 • JDK™ release 5 spreads, “Extreme GUI Makeover” starts Phase +1: 2006-2007 • JDK™ release 6, Aerith, SwingLabs matures • TimingFramework, Nimbus, Filthy Rich Clients Phase +2: 2008 • Add NetBeans Software RCP: Filthy Rich Platform Clients • Ready for complex applications - anyone? 2008 JavaOneSM Conference | java.sun.com/javaone | 6
  7. 7. Java Platform on the Desktop: Readiness Phases Phase -1: prior 2005 blueMarine 0.8 • Slow, poorly integrated, ugly L&F Phase 0: 2005 died here • JDK™ release 5 spreads, “Extreme GUI Makeover” starts Phase +1: 2006-2007 • JDK™ release 6, Aerith, SwingLabs matures • TimingFramework, Nimbus, Filthy Rich Clients Phase +2: 2008 • Add NetBeans Software RCP: Filthy Rich Platform Clients • Ready for complex applications - anyone? 2008 JavaOneSM Conference | java.sun.com/javaone | 7
  8. 8. Java Platform on the Desktop: Readiness Phases Phase -1: prior 2005 blueMarine 0.8 • Slow, poorly integrated, ugly L&F Phase 0: 2005 died here • JDK™ release 5 spreads, “Extreme GUI Makeover” starts Phase +1: 2006-2007 blueMarine 0.9 • JDK™ release 6, Aerith, SwingLabs matures • TimingFramework, Nimbus, Filthy Rich Clients Phase +2: 2008 reborn here • Add NetBeans Software RCP: Filthy Rich Platform Clients • Ready for complex applications - anyone? 2008 JavaOneSM Conference | java.sun.com/javaone | 8
  9. 9. Problems 2008 JavaOneSM Conference | java.sun.com/javaone | 9
  10. 10. Solutions 2008 JavaOneSM Conference | java.sun.com/javaone | 10
  11. 11. If you can just remember four points NetBeans Software RCP NetBeans Visual Library SwingLabs NASA World Wind for Java Platform 2008 JavaOneSM Conference | java.sun.com/javaone | 11
  12. 12. OpenBlueSky Where generic stuff spins off blueMarine Can be used for other applications Consolidated stuff going to PlatformX 2008 JavaOneSM Conference | java.sun.com/javaone | 12
  13. 13. Agenda Introduction NetBeans Software RCP Visual Library GeoSpatial Components Java Platform Imaging APIs Conclusion 2008 JavaOneSM Conference | java.sun.com/javaone | 13
  14. 14. Question What do you expect from a (desktop) framework? 2008 JavaOneSM Conference | java.sun.com/javaone | 14
  15. 15. Desktop Frameworks Solid foundation to base your application on APIs working together, well tested Service discovery and provider Plugin support Messaging infrastructure (via events) Integrated help system And more 2008 JavaOneSM Conference | java.sun.com/javaone | 15
  16. 16. Swing is not a framework Missing sophisticated components • e.g.: date picker, tree+table, etc... Neither service discovery nor providers No plugins No messaging (only simple listeners) Threading issues JSR-296 (Java Specification Request Swing Application Framework) not good for large applications 2008 JavaOneSM Conference | java.sun.com/javaone | 16
  17. 17. What is NetBeans Software RCP? NetBeans { NetBeans IDE NetBeans RCP 2008 JavaOneSM Conference | java.sun.com/javaone | 17
  18. 18. What is NetBeans Software RCP? NetBeans { NetBeans IDE NetBeans RCP 2008 JavaOneSM Conference | java.sun.com/javaone | 18
  19. 19. What is NetBeans Software RCP? NetBeans { NetBeans IDE NetBeans RCP Your Desktop Application 2008 JavaOneSM Conference | java.sun.com/javaone | 19
  20. 20. NetBeans Software RCP You start with a skeleton application You populate it • panels, views • actions, menus, toolbars • etc.. Often declaratively Based on Swing • You can integrate third parties' components • You can control the Look&Feel 2008 JavaOneSM Conference | java.sun.com/javaone | 20
  21. 21. Most important NetBeans RCP APIs Actions Modules DataObjects Nodes Dialogs Options Explorer Progress FileSystem Visual Library Lookup Windowing/docking 2008 JavaOneSM Conference | java.sun.com/javaone | 21
  22. 22. Explorers, Viewers, Actions 2008 JavaOneSM Conference | java.sun.com/javaone | 22
  23. 23. Lookup API Plays a fundamental role in many APIs Repository for a bag of objects Locator for services Fires events “Global” lookup can be used as a simple “event bus” Service service = Lookup.getDefault().lookup(Service.class); 2008 JavaOneSM Conference | java.sun.com/javaone | 23
  24. 24. DataObject represents a file-based entity 2008 JavaOneSM Conference | java.sun.com/javaone | 24
  25. 25. You can extend DataObject 2008 JavaOneSM Conference | java.sun.com/javaone | 25
  26. 26. Creating a new DataObject layer.xml: <filesystem> <folder name="Services"> <folder name="MIMEResolver"> <file name="PhotoResolver.xml" url="PhotoResolver.xml"> </file> </folder> </folder> </filesystem> PhotoResolver.xml: <MIME-resolver> <file> <ext name="TIF"/> <ext name="TIFF"/> <resolver mime="image/tiff"/> </file> <!-- others ext/mime mappings --> </MIME-resolver> 2008 JavaOneSM Conference | java.sun.com/javaone | 26
  27. 27. Creating a new DataObject public class PhotoDataObject extends MultiDataObject { ... } public class PhotoDataLoader extends UniFileLoader { public PhotoDataLoader() { // contains “image/jpg”, “image/tiff”, etc... String[] mimeTypes = ImageIO.getReaderMIMETypes(); for (final String mimeType : mimeTypes) { getExtensions().addMimeType(mimeType); } } protected MultiDataObject createMultiObject(FileObject file) { return new PhotoDataObject(file, this); } //... } 2008 JavaOneSM Conference | java.sun.com/javaone | 27
  28. 28. Lookup holds “capabilities” 2008 JavaOneSM Conference | java.sun.com/javaone | 28
  29. 29. Node “represents” DataObject 2008 JavaOneSM Conference | java.sun.com/javaone | 29
  30. 30. Node has “capabilities” too 2008 JavaOneSM Conference | java.sun.com/javaone | 30
  31. 31. Managing basic objects File file = new File("photo.jpg"); FileObject fileObject = FileUtil.toFileObject(file); DataObject dataObject = DataObject.find(fileObject); // Note: static type is DataObject, // not PhotoDataObject Node node = dataObject.getNodeDelegate(); // Retrieve capabilities // They have been set by PhotoDataObject constructor Metadata metadata = dataObject.getLookup(). lookup(Metadata.class); // or Metadata metadata = node.getLookup(). lookup(Metadata.class); 2008 JavaOneSM Conference | java.sun.com/javaone | 31
  32. 32. Representing sets of Nodes 2008 JavaOneSM Conference | java.sun.com/javaone | 32
  33. 33. View renders Nodes 2008 JavaOneSM Conference | java.sun.com/javaone | 33
  34. 34. Actions can be automatically enabled 2008 JavaOneSM Conference | java.sun.com/javaone | 34
  35. 35. Declaring Actions <filesystem> <folder name="Actions"> <folder name="Window"> <file name="mypkg-CalendarExplorerAction.instance"/> </folder> </folder> <!-- Adds the action to the Menu/Window main menu. --> <folder name="Menu"> <folder name="Window"> <file name="CalendarExplorerAction.shadow"> <attr name="originalFile" stringvalue="Actions/Window/mypkg-CalendarExplorerAction.instance"/> <attr name="position" intvalue="120"/> </file> </folder> </folder> 2008 JavaOneSM Conference | java.sun.com/javaone | 35
  36. 36. Declaring Actions <!-- Adds the actions to the Component toolbar. --> <folder name="Toolbars"> <folder name="Explorer"> <file name="mypkg-CalendarExplorerAction.shadow"> <attr name="originalFile" stringvalue="Actions/Window/mypkg-CalendarExplorerAction.instance"/> <attr name="position" intvalue="120"/> </file> </folder> </folder> <!-- Creates keystroke shortcuts. --> <folder name="Shortcuts"> <file name="A-D-L.shadow"> <attr name="originalFile" stringvalue="Actions/Window/mypkg-CalendarExplorerAction.instance"/> </file> </folder> </filesystem> 2008 JavaOneSM Conference | java.sun.com/javaone | 36
  37. 37. Example of context-sensitive Action public class ShowPhotoAction extends CookieAction { protected void performAction(Node[] nodes) { PhotoDataObject dataObject = nodes[0].getLookup(). lookup(PhotoDataObject.class); // use dataObject } protected int mode() { return CookieAction.MODE_EXACTLY_ONE; } public String getName() { return "Show Photo"; } protected Class[] cookieClasses() { return new Class[] { PhotoDataObject.class }; } protected String iconResource() { return ".../show_photo.png"; } ... } 2008 JavaOneSM Conference | java.sun.com/javaone | 37
  38. 38. Some points You don't need to always use everything • E.g. just Nodes, no DataObjects • Can use them “incrementally” NetBeans Software RCP keeps objects in sync • E.g. updating a DataObject → bound Nodes • E.g. Nodes bound to the same DataObject • By means of PropertyChangeListener 2008 JavaOneSM Conference | java.sun.com/javaone | 38
  39. 39. NetBeans Software RCP stuff can be extended What about a “cover flow” view? Use JOGL (Java Bindings for OpenGL) for fast 3D API Just extend and create a new View TimingFramework for animating stuff 2008 JavaOneSM Conference | java.sun.com/javaone | 39
  40. 40. CoverFlowView 2008 JavaOneSM Conference | java.sun.com/javaone | 40
  41. 41. Update Centers NetBeans software components (.nbm) • can be added / removed on the fly • can declare dependencies • can be versioned • can add actions, menus, toolbars Pretty good for plugins 2008 JavaOneSM Conference | java.sun.com/javaone | 41
  42. 42. Update Centers 2008 JavaOneSM Conference | java.sun.com/javaone | 42
  43. 43. Agenda Introduction NetBeans Software RCP Visual Library GeoSpatial Components Java Platform Imaging APIs Conclusion 2008 JavaOneSM Conference | java.sun.com/javaone | 43
  44. 44. Visual Library Support for graph-oriented modeling • Nodes • Arcs • Routing • Interaction Can be creatively used • Whiteboard paradigm • Use interactivity: touch, drag, change objects PS Can be used with plain Swing apps 2008 JavaOneSM Conference | java.sun.com/javaone | 44
  45. 45. LightTable 2008 JavaOneSM Conference | java.sun.com/javaone | 45
  46. 46. Agenda Introduction NetBeans Software RCP Visual Library GeoSpatial Components Java Platform Imaging APIs Conclusion 2008 JavaOneSM Conference | java.sun.com/javaone | 46
  47. 47. JXMapViewer A generic 2D, tile-based map renderer • See Joshua Marinacci's blog • Retrieves tiles from the web (or locally) • Part of Swing-WS (SwingLabs) • Can stick objects to the map Hint: integrate it with the Visual Library 2008 JavaOneSM Conference | java.sun.com/javaone | 47
  48. 48. GeoViewer 2008 JavaOneSM Conference | java.sun.com/javaone | 48
  49. 49. NASA World Wind for Java Platform Java platform version of NASA World Wind • 3D software that renders the Earth • NASA terrain imagery • Other data sets can be plugged in • if legal stuff is ok... Based on JOGL 2008 JavaOneSM Conference | java.sun.com/javaone | 49
  50. 50. GeoViewer 3D 2008 JavaOneSM Conference | java.sun.com/javaone | 50
  51. 51. Agenda Introduction NetBeans Software RCP Visual Library GeoSpatial Components Java Platform Imaging APIs Conclusion 2008 JavaOneSM Conference | java.sun.com/javaone | 51
  52. 52. Java Platform Imaging APIs Many options (and dispersive?) • Java 2D™ API, JAI, ImageJ, JMagick, JHLabs, ... Some too difficult Wild behaviour and performance differences Parallel Computing is a must • Multi Core • Small, local mini-grids • Massive Grid Computing There's not a global community 2008 JavaOneSM Conference | java.sun.com/javaone | 52
  53. 53. Mistral: fix 'em up Imaging meta-framework Multiple APIs can be used together Simplifies APIs Supports multicore, Jini services, Sun™ Grid 2008 JavaOneSM Conference | java.sun.com/javaone | 53
  54. 54. Some Mistral examples File file = new File(...); EditableImage image = EditableImage.create(new ReadOp(file, 0)); image.execute(new ResizeOp(600, 400)); EXIF exif = image.getMetadata(EXIF.class); public class MyTask extends ImagingTask { private File file; public MyImagingTask (File file) { this.file = file; } public void run() { EditableImage image = read(file, 0); execute(image, new CropOp(10, 10, 600, 400), "crop"); Histogram histogram = execute(image, new HistogramOp(), "histogram").getHistogram(); // etc... } } for (int i = 0; i < n; i++) { ImagingTaskProcessor.getInstance().post(new MyTask(file[i])); } 2008 JavaOneSM Conference | java.sun.com/javaone | 54
  55. 55. Agenda Introduction NetBeans Software RCP Visual Library GeoSpatial Components Java Platform Imaging APIs Conclusion 2008 JavaOneSM Conference | java.sun.com/javaone | 55
  56. 56. Open Problems for blueMarine Java platform still misses something on the desktop • e.g. video streaming, USB support • Can be worked around with JNI/JNA • Java platform 7 is not too far Some NB RCP stuff not fully customizable Better integration NB RCP SwingLabs Compliance to Apple HIG Linux + JOGL issues No JAI native support for Mac OS X 2008 JavaOneSM Conference | java.sun.com/javaone | 56
  57. 57. Be efficient with innovation “Cool stuff„ often means complexity • Go quickly from idea to prototype • Integrate easily others' stuff • NIH isn't a killer-idea, but an idea-killer Build cool demonstrators • ...and cool applications soon after (stay tuned for some new cool stuff) 2008 JavaOneSM Conference | java.sun.com/javaone | 57
  58. 58. Summary Most Swing showstoppers are history now 2008 JavaOneSM Conference | java.sun.com/javaone | 58
  59. 59. Summary Most Swing showstoppers are history now You CAN ship desktop apps 2008 JavaOneSM Conference | java.sun.com/javaone | 59
  60. 60. Summary Most Swing showstoppers are history now You CAN ship desktop apps There's a world beyond Swing • SwingLabs, NetBeans Software RCP, etc... 2008 JavaOneSM Conference | java.sun.com/javaone | 60
  61. 61. Summary Most Swing showstoppers are history now You CAN ship desktop apps There's a world beyond Swing • SwingLabs, NetBeans Software RCP, etc... Be creative. Mix 'em up. NetBeans: the only IDE I need... 2008 JavaOneSM Conference | java.sun.com/javaone | 61
  62. 62. Summary Most Swing showstoppers are history now You CAN ship desktop apps There's a world beyond Swing • SwingLabs, NetBeans Software RCP, etc... Be creative. Mix 'em up. NetBeans: the only IDE I need... ... but for some tasks related to digital photo management Eclipse is just the best tool 2008 JavaOneSM Conference | java.sun.com/javaone | 62
  63. 63. Eclipse Optic Cleaning System 2008 JavaOneSM Conference | java.sun.com/javaone | 63
  64. 64. For More Information Links to projects, blogs and documentation • weblogs.java.net/blog/fabriziogiudici • bluemarine.tidalwave.it • openbluesky.dev.java.net • mistral.tidalwave.it • forceten.tidalwave.it • www.netbeans.org/features/platform • graph.netbeans.org • platformx.netbeans.org • www.swinglabs.org • worldwind.arc.nasa.gov/java • quaqua.dev.java.net 2008 JavaOneSM Conference | java.sun.com/javaone | 64
  65. 65. blueMarine Or Why You Should Really Ship Swing Applications Fabrizio Giudici TS-5483. Speaker’s logo here (optional)
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×