 |
My Dream JDesktopPane..
Posted by eitan on September 23, 2005 at 09:37 PM | Comments (17)
One area of Swing that does not appear to be getting much attention
these days (or that may have fallen out of favor with developers)
are the elements that make up the Multiple Document Interface: JDesktopPane
and JInternalFrame.
I believe that there's tremendous potential in further developing
the Swing features in this space.
What I am envisioning is nothing less than a JDesktop that rivals
the modern desktops of operating systems today, in terms of feature sets.
I'd like to share this vision with you. These would be some of the
features in 'my ideal java desktop':
- the ability to easily dock panels along the edges of
a JDesktopPane (I do realize that there exist commercial implementations
of this feature today)
- multiple workspaces (like we have on linux desktops)
- apple-like features: minimizing frames with effects?
- ctrl-tabbing to switch between jinternalframes
- a dock
- easy default keyboard shortcuts for hiding the current internal
frame, or, the one i really like from the macos is 'hide others'
(command-option-h)
- a trash
- standard window arrangement features such as tile & cascade (why not?)
- the ability to move/place iconized views of jinternalframes anywhere
on the jdesktoppane, to configure the placement behavior ('snap to grid'
etc..)
Opportunities are rife for improving this area of the Swing API. I believe
such an environment could become the basis for some really nice and powerful
rich desktop applications.
I realize I'm not explaining myself fully here. "Why would one want to create
effectively a 'desktop within a desktop' type of application??" you may ask.
This raises a much deeper question. It is my belief that desktops today, albeit
nice, are an incomplete model of a virtual world. The world of today's operating
systems desktops is a poor world of files, folder, and applications. It is a
primitive model that I believe could be made significantly richer. The desktop
metaphor is effectively an object oriented user interface platform and is an
excellent foundation upon which to build applications with rich domains. Imagine
the ability to place representations of domain objects in folders, to search/query for
objects with the facility that we query files today, to invoke their methods with
a right-click gesture, to plug in model extensions, to integrate different models
into a single user interface substrate. You'd use the same environment, the same
runtime application to do email, to file documents, to write checks, or to do
software development. More so, there would exist an overarching consistency in
terms of how you manipulate objects, regardless of their type.
Well, I've gone considerably beyond the scope of this blog entry, so I better
stop here. :-)
Bookmark blog post: del.icio.us Digg DZone Furl Reddit
Comments
Comments are listed in date ascending order (oldest first) | Post Comment
-
Eitan,
The RC for Substance 2.0 look-and-feel release added some nice features that were missing in Metal. See this page and scroll down to "Internal frames and desktop icons" section. I think that the list above has some excellent points which i would be glad to implement in the next Substance release. Thanks for the suggestions (though indirect).
Posted by: kirillcool on September 24, 2005 at 07:05 AM
-
Eitan,
You should go check out the FlexDock project on Java.net. The binaries haven't been updated but the CVS source has a lot of what you are looking for.
Posted by: scottdelap on September 24, 2005 at 11:13 AM
-
thank you for the suggestions. i look forward to digging into both substance and flexdock. aside: scott, i just finished reading 'java desktop live' and _really_ enjoyed it. thank you.
Posted by: eitan on September 24, 2005 at 05:13 PM
-
the flexdock framework is quite impressive. i ran some of the demos and all of the docking features that one would expect are there, behaving as one would expect them to. thanks for pointing out flexdock.
Posted by: eitan on September 24, 2005 at 09:14 PM
-
These are all nice features, but the thing that bothers me the most is
that there isn't a common parent class or interface for JFrame and JInternalFrame,
particularly so that a single handler could listen for close events from
either one.
The distinction between JOptionPane.show... and JOptionPane.showInternal...
causes problems too.
Both of these cause differences in a JDesktop based app and a multi-frame app
to be expressed at a much too low level in the code. Ideally things should work
the same for both kinds of frames wherever possible.
Posted by: cobrien on September 26, 2005 at 05:23 AM
-
Hi,
I had released a Open Source Java App with some of these features you mentioned here
There are some screenshots available.
Posted by: igor_ti on September 26, 2005 at 05:43 AM
-
Eitan, where are you going with this?
Object-based desktops ala NakedObjects?
Perhaps something more inspired by MirrorWorlds or NameSys?
Please expand when you get time.
Posted by: coxcu on September 26, 2005 at 08:23 AM
-
What exactly did you have in mind for a "Trash" option? A seperate "recycle bin" for files deleted from that app? An "un-close window" option? Or something else?
Posted by: afishionado on September 26, 2005 at 11:58 AM
-
Eitan, you can also check out VLDocking 2.0 which has been released today (it's dual licensed : GPL compatible).
It also contains a feature you didn't mention : support for heavyweight components (like Java3D, JOGL, the JDIC browser or the Open CASCADE engine).
Lilian
Posted by: vlsolutions on September 26, 2005 at 11:59 PM
-
i've come up with a way to tab among frames within a JDesktopPane....still a little quirky, toughest part is keeping track of some order for the frames. The desktop pane currently keeps a list of all frames, say you have
A - B - C.... where is active. then you click on B, now the list is, B - A - C....if you click on C, i think it does C - A - B ....so this is tricky.
i'll let you know more when i get it to be a bit better.
Posted by: codecraig on September 27, 2005 at 06:50 AM
-
JDistro has 2,7,8,9 and 10. I don't like 1: do you know a desktop that has it? No, AFAIK. 4 is planned but you can also click in the window list. I don't know what you mean by 5: like in NextStep? 6 would bring a lot of problems, I prefer to put the frame to the back instead of hiding it. All is implemented as subclasses of JDesktopPane and DefaultDesktopManager.
Posted by: desnoix on September 29, 2005 at 02:27 PM
-
To me the great difference between docking solutions is whether or not they can dock outside the main frame - like JIDE and FlexDock (I don't think Eclipse, VLSolutions, or any other docking frameworks provide this). As opposed to solutions that only let you move internal frames around one larger external frames, JIDE and FlexDock allow you to drag an internal frame and have it "popped out" into a new external frame. This may be of interest to me since I've been working on an application where the users have 3 or 4 screens, and our app may take up much, but not all, the real estate on all of them. Users are using multiple applications (browser, email), and they may not be integrated fully into a Swing app, so the user may want to surround their browser with helpful views, or be able to see part of the their browser in the background and bring it to the forground quickly (think Visual Cafe vs. JBuilder). I'm not sure JDesktop can be extended in this way, but if docking is important to Swing, then why limit yourself to what JDesktop offers. Until the world is using JDistro which looks awfully cool, it's come a very long way), then "integratable" windows are a key feature.
Posted by: michaelbushe on October 03, 2005 at 09:02 AM
-
Just to clarify the issue raised by the last post from michaelbusche, VLDocking 2.0 supports floatable dockables (you can detach a dockable from its content pane and move it anywhere on screen).
Lilian
Posted by: vlsolutions on October 04, 2005 at 08:46 AM
-
hi all,
sorry for some reason i neglected to check this thread. i'm eager to start looking at jdistro and vldocking. thank you for the posts.
i was wondering if someone'd ask the question:
Eitan, where are you going with this? Object-based desktops ala NakedObjects? Perhaps something more inspired by MirrorWorlds or NameSys? Please expand when you get time.
the answer is yes: that's exactly where i'm going with this. nakedobjects was the main source of inspiration. i have been working on an oo desktop for business applications and it's come a long way. my work so far has been all in java, and using swing for the view mechanism. i'm using hibernate for the persistence mechanism. i've had good success with both.
i'll try to post a screenshot and more information soon.
Posted by: eitan on October 07, 2005 at 12:22 PM
-
to clarify the question about the 'trash' option: basically, say i have a gui with a view that represents a business object, say a meeting with someone. for some reason i want to delete the meeting (maybe it was canceled?). so i drop the view into the trash. just like one would drop a representation of a file (an icon) into a trash in a normal desktop.
Posted by: eitan on October 07, 2005 at 12:26 PM
-
ok, i cooked up a few screenshots at http://u2d.com/p4-screenshots/
that shows the ooui/environment i've developed.
Posted by: eitan on October 07, 2005 at 03:05 PM
-
..oops..should have hyperlinked that: http://u2d.com/p4-screenshots/
Posted by: eitan on October 07, 2005 at 03:06 PM
|