After having worked on Web design and Android, I finally started work on a desktop software, until I hit a major delay in my development cycle when I actually started UI Design for Desktop. The experience so far is a pain. I decided to use Java to code the program, because then I could use cross-platform APIs for sockets and wireless interfaces (which my program relies heavily on, and works successfully).
Web and Android UI design:
HTML/CSS/Javascript ; XML/Android API –> Offers high flexibility, customization, quick UI development cycle.
Java desktop UI design
AWT/Swing/Swing FX –>
-
Almost no customization possible, as seen from issues here and here. When customization is possible, implementing it highly increases development time as seen here. It also increases code-complexity and in most cases, the solution is native, and not applicable cross-platform (at least Linux,Windows,Mac). The native, default look is really not most UI designers want.
-
Drag-and-drop options are good , improve development time eg. Window Builder. But options like adding an ImageView is missing. And, if customization mentioned in point 2,is required, the auto-generated code has to be modified heavily, totally negating the use of Drag-n-drop.
Can anyone suggest me a really good or close-to-good UI tool , or say UI Engine (if one exists) , that has the following features:
1. Quick development time. Drag-n-drop, HTML/CSS/XML like methods to design.
2. Everything is cross-platform, including customization solutions.
3. High degree of customization. Developer designs what looks good to him/her,
without increasing time-to-develop much.
4. Also cross-language. That is, has wrappers for all major programming languages,
like C++,Java,Python etc.
The best approach or tools, in my opinion:
-
Qt Framework . Very good for UI, but it’d really be good if it has wrappers
for Java and other languages. It will not reduce development time, and will
require hand coding, but the interface can be made to look really good and
usable. -
WxPython . Another good tool, would be cool if it has wrappers for other
languages. -
Some tool, that lets design desktop UI with HTML/CSS/XML-like syntax and
ease-of-use. -
Stop thinking of UI tools and either
a. Just stop complaining and use the defaults and existing tools and native
looks.b. Hand code everything, and customize individually for each platform.
c. Take a graphic canvas in Java and program UI, like you’d program a scene
in a game.
Please suggest if you think otherwise, or if there are better,easier options available.
Thanks.
“Almost no customization possible” is in my opinion, short sighted, you could look here for information on look and feels, which, if your adventurous, you could create your own. Many of the issues people have with customisation of Swing comes down more to a lack of understanding then the inflexibility of the API, in fact, I’ve found Swing to among the most flexible and customisable toolkits around – IMHO.
You could also look here about how to make your own components
What you have to realise is, as you move closer to “quick tools” you start to reduce the flexibility and customisability, as these tools start to lock you in.
I don’t have experience with WindowBuilder, but NetBeans form designer allows you to include any component that is within the projects class path, including any you’ve build or downloaded.
I agree that one of the criticisms often leveled at Swing is how long it can take to get it up and running. This comes down to an API designed for flexibility and customisability. It’s up to the end developer to build the libraries around the API that best suits their needs.
Most people will tell you to avoid the screen builders in favour of hand coding. Personally, I like the screen builders, but I insist that my junior developers build a good understanding of how layout managers work and build design techniques like compound layouts.
I think one of the problems a lot of people have is forgetting to build the application. While I like a good looking application, I’d still prefer one that actually does what it was designed for and does it well, over looking pretty.
IMHO