Hacking on GraphHopper - a Java road routing engine. Peter has posted 62 posts at DZone. You can read more from them at their website. View Full User Profile

A KISS Desktop UI Implemented in JavaFX

04.21.2010
| 7569 views |
  • submit to reddit

Some minor, probably not very impressive ideas, came to mind over the last few weeks to adapt the common desktop UI experience to my needs. I am not familiar with Apple's OS, which is known to provide good UI and has possibly already implemented my ideas. If this is the case, this post is only here to show some effects and components implemented in JavaFX. Note that I am not a specialist for good looking User Interfaces! I have never read any UI guidelines,  and I am not proud of that. For specialists refer to Kirill Grouchnikov (-> pushing-pixels), Joshua Marinacci (-> blog), Jonathan Giles (-> blog), …

More Intuitve Items to Log-Off

The first change is to show all the possible log-off possibilities with more intuitive icons and not only in raw text. The user should be able to determine the right thing faster (on mouse over or click a description could pop up)

In clockwise direction or from left to right:

  1. lock screen
  2. user log out
  3. restart
  4. save to disc
  5. save to RAM
  6. and the last one: shutdown.

Some of the icons were taken from the great amarok player some were backed by my crude designer heart.

Tags instead Menu

Another idea was that the normal application menu is somewhat complicated to use. Even in Vista/Win7 or Kde 4 you need to browse through the menu if you don’t know the name of the application, although I had to admit that I really like the search functionality in Vista/Win7 (BTW that was the only thing I liked about Vista). The point is that the menu items should be clickable and then filter the application list on the right side. So the menu items behave like tags:

… select ‘Internet’ and ‘Office’ to find my email client:

The textbox can be used to further filter the applications by name:

Taskbar == Application Chooser

The next idea is a taskbar which is at the same time the application chooser which is normally triggered from ALT+TAB. So instead of the known taskbar (here kde):

and the application chooser (gnome/kde):

I want to have only one unified bar to keep things simple (see KISS). In the first try I though I will put the unified taskbar on the bottom like it is normally done with the ordinary taskbar:

In this example I used some images to fake application content. The images were taken from a JavaFX example.

The window switching and menu-pop-up is triggered from a simple ‘mouse over’ not from a time consuming mouse click. Or sometimes I prefer keyboard then I can use ALT + LEFT/RIGHT. Now the desktop is like I wanted it, but what should be shown when I close all apps? And there is a lot of unused space between the last icon and the log-off menu which is ugly. But moving this menu to the left could cause a lot of trouble for the user. Then one solution could be to move it where it does not fit: into the finder or apps menu (like some OS vendors did).

Second Try With Desktop Ground

So we need to introduce the desktop ground as a special window available from the taskbar to make things even more simple. All the ’starter’-icons from the Apps-menu then will go onto our dockable desktop ground. Even the finder-menu and the log-off menu will be there as docked apps which can be arranged like the user wants it. The idea of ‘docks’ is stolen from my current window manager called Window Maker. Of course those docks could be used to display weather, stocks, tweets, ….

To further improve the experience for me as a developer I will put the unified taskbar in the center of the screen. OMG, what? Yes, this bar is only displayed on e.g. ubuntu key (at the moment this is implemented with the ALT key instead). I guess, this is the point where UI experts would like to hit me, but I think this is a good solution – at least for me, because:

  1. It is simple
  2. The average distance from any point to the center is less than to the bottom of the screen, so we have faster acces to any of the current running applications.
  3. We save pixels because our taskbar is not omnipresent

So here a screenshot of this centered unified taskbar:

Always Fullscreen

We even could go further to avoid bars on the top of each application window. To close an application we could put a small ‘close’-icon (like it is the case for tabs for your browser) on each preview image of the unified taskbar. So the applications could then be always full screen like it is the case for mobile devices. Hmmh, but then we cannot see two apps at the same time!? For that we could implement resizing applications in the unified taskbar via mouse scroll and dragging via ubuntu key+mouse dragging. Now the desktop has two states:

  • Editing mode, where the taskbar is shown and application windows (except the desktop) could be closed, resized, moved and we can switch applications
  • Application mode, where normally only one application is visible in full screen

So now look at the applications’ desktop where each of the docks (two icon docks, the find-menu dock and the log-off dock) could be dragged around to suit your needs:

Click here to start the webstart version.

The things which are currently not implemented in the JavaFX application:

  • Closing, resizing and dragging of application windows
  • If the user hits ENTER in the find-menu dock it should start that command and if this command does not exist it will start a desktop search
  • ALT+TAB does not work with JavaFX so I had to use ALT+LEFT and ALT+RIGHT
  • The current time could be displayed instead of an icon for the desktop

Conclusion

I would really like to see some of my UI ideas in Kde or Gnome. Or gnome-do should replace all the bars in a common gnome UI. I think those ideas are simplifications and usage boosts and not only eye catchers in my humble opinion. Like the most UI ‘improvements’ were in the last time … keyword: compiz.

And are there developers of JavaFX out there who read this?

Then first of all: Thanks a lot for JavaFX!

And secondly:

  • Why do I need a compiler for JavaFX?? I would really like to ‘press F5′ and see my minor layout changes or see my minor code changes. This is not a nice to have. This is a must-have, I think. This should be possible!
  • The language reference should be improved with examples otherwise it is senseless to the intented audience: developers and UI designers. And I couldn’t found the for loop!? Only the for expression … strange.
  • The toolkits (ie. NetBeans) need further, if not a lot, work . These words are a bit harsh, I know, but I am a fastidious Java developer and know how well IDEs could work.
    First of all the most pain is the debugger. I know how well this works for Java, but I only needed the content of my variable at a specific moment, but NetBeans wasn’t able to show this, although it shows the content of ‘native’ objects like Rectangle:

    So I needed to use println(“{item}”)
  • Unit tests should be as easy as for normal Java projects
  • Other anoying bugs occured: if you format e.g. the sourcecode of AppItem where some brackets (of a function) will move one column to the right on each format call. The same appears for e.g. ‘public-read var width;’ where the semicolon moves to the right, too. Problems while operating within strings and variables in the string. The code completion is case insensitive :-/ The “if else” construct is not that nicely formated if you don’t specifythe brackets. There was no javadocs for ‘native’ javaclasses. There are no boolean operations for sequence like ‘and’, ‘or’, …. which would be nice to have.

So that’s a lengthy list, but to be honest: while working with JavaFX I had fun! Try it out!

Resources

Clone the latest and greatest status of the project here:

hg clone http://timefinder.hg.sourceforge.net:8000/hgroot/timefinder/desktopbar/

(source code is under public domain the pics shouldn't be reused)

or try it out now!

 

From http://karussell.wordpress.com/2010/04/20/a-kiss-desktop-ui-implemented-in-javafx/

Published at DZone with permission of its author, Peter Karussell.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Christopher Wright replied on Wed, 2010/04/21 - 10:58am

Peter,

Looks very nice and clean.  One suggestion would be to make the dragging more fluid instead of snapping to a grid.  I completely agree with the need to filtering application titles by tags...especially in cases where a user has 50+ applications on their machine!

Thanks for posting,

Chris

Peter Karussell replied on Wed, 2010/04/21 - 2:47pm in response to: Christopher Wright

Hi Chris!

Glad that you liked it.

Yes, snapping to a grid is not that good (although it works similar in WindowMaker and it is not that limitating), and then in a later version overlapping of docks could be easily avoided. If it would be fluid then the implementation to avoid overlapping is not that easy but of course possible :-)

Peter.

Philippe Lhoste replied on Fri, 2010/04/23 - 4:40pm

Compiler: the funny thing is that JavaFX is supposed to be a "scripting" language...

The for expression is a for loop, if you don't need its result, just ignore it.

I don't use IDEs (yet?) to code JavaFX, just my good old SciTE editor: I coded Ctrl+F7 to compile, F5 to run, it is quick and easy. I manage indentation myself (with care) and just ask my editor to keep the current indentation level when hitting Enter.

Peter Karussell replied on Sat, 2010/04/24 - 1:10pm

> Compiler: the funny thing is that JavaFX is supposed to be a "scripting" language...

yeah :-)

Pippifin Cakasey replied on Sat, 2011/10/22 - 8:38am

Looks very nice and clean.  One suggestion would be to make the dragging more fluid instead of snapping to a grid. aloe vera beauty

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.