source: liacs/se/RouteGUI/java-gui-builders.html@ 386

Last change on this file since 386 was 2, checked in by Rick van der Zwet, 15 years ago

Initial import of data of old repository ('data') worth keeping (e.g. tracking
means of URL access statistics)

File size: 96.3 KB
RevLine 
[2]1<html>
2
3<head>
4<meta name=Generator content="Microsoft Office HTML Filter 2.0">
5<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
6<meta name=Originator content="Microsoft Word 9">
7<title>Java GUI Builders</title>
8<style>
9<!--
10
11p.MsoNormal, li.MsoNormal, div.MsoNormal
12 {
13 margin:0in;
14 margin-bottom:.0001pt;
15 font-size:10.0pt;
16 font-family:Verdana;}
17h1
18 {
19 margin-top:12.0pt;
20 margin-right:0in;
21 margin-bottom:3.0pt;
22 margin-left:.3in;
23 text-indent:-.3in;
24 page-break-after:avoid;
25 font-size:16.0pt;
26 font-family:Verdana;}
27h2
28 {
29 margin-top:12.0pt;
30 margin-right:0in;
31 margin-bottom:3.0pt;
32 margin-left:.4in;
33 text-indent:-.4in;
34 page-break-after:avoid;
35 font-size:14.0pt;
36 font-family:Verdana;
37 font-style:italic;}
38h3
39 {
40 margin-top:12.0pt;
41 margin-right:0in;
42 margin-bottom:3.0pt;
43 margin-left:.5in;
44 text-indent:-.5in;
45 page-break-after:avoid;
46 font-size:13.0pt;
47 font-family:Verdana;}
48h4
49 {
50 margin-top:12.0pt;
51 margin-right:0in;
52 margin-bottom:3.0pt;
53 margin-left:.6in;
54 text-indent:-.6in;
55 page-break-after:avoid;
56 font-size:14.0pt;
57 font-family:"Times New Roman";}
58h5
59 {
60 margin-top:12.0pt;
61 margin-right:0in;
62 margin-bottom:3.0pt;
63 margin-left:.7in;
64 text-indent:-.7in;
65 font-size:13.0pt;
66 font-family:Verdana;
67 font-style:italic;}
68h6
69 {
70 margin-top:12.0pt;
71 margin-right:0in;
72 margin-bottom:3.0pt;
73 margin-left:.8in;
74 text-indent:-.8in;
75 font-size:11.0pt;
76 font-family:"Times New Roman";}
77p.MsoHeading7, li.MsoHeading7, div.MsoHeading7
78 {
79 margin-top:12.0pt;
80 margin-right:0in;
81 margin-bottom:3.0pt;
82 margin-left:.9in;
83 text-indent:-.9in;
84 font-size:12.0pt;
85 font-family:"Times New Roman";}
86p.MsoHeading8, li.MsoHeading8, div.MsoHeading8
87 {
88 margin-top:12.0pt;
89 margin-right:0in;
90 margin-bottom:3.0pt;
91 margin-left:1.0in;
92 text-indent:-1.0in;
93 font-size:12.0pt;
94 font-family:"Times New Roman";
95 font-style:italic;}
96p.MsoHeading9, li.MsoHeading9, div.MsoHeading9
97 {
98 margin-top:12.0pt;
99 margin-right:0in;
100 margin-bottom:3.0pt;
101 margin-left:1.1in;
102 text-indent:-1.1in;
103 font-size:11.0pt;
104 font-family:Verdana;}
105p.MsoToc1, li.MsoToc1, div.MsoToc1
106 {
107 margin:0in;
108 margin-bottom:.0001pt;
109 font-size:10.0pt;
110 font-family:Verdana;}
111p.MsoToc2, li.MsoToc2, div.MsoToc2
112 {
113 margin-top:0in;
114 margin-right:0in;
115 margin-bottom:0in;
116 margin-left:10.0pt;
117 margin-bottom:.0001pt;
118 font-size:10.0pt;
119 font-family:Verdana;}
120p.MsoHeader, li.MsoHeader, div.MsoHeader
121 {margin:0in;
122 margin-bottom:.0001pt;
123 font-size:10.0pt;
124 font-family:Verdana;}
125p.MsoFooter, li.MsoFooter, div.MsoFooter
126 {margin:0in;
127 margin-bottom:.0001pt;
128 font-size:10.0pt;
129 font-family:Verdana;}
130p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
131 {margin-top:0in;
132 margin-right:0in;
133 margin-bottom:6.0pt;
134 margin-left:0in;
135 font-size:10.0pt;
136 font-family:Verdana;}
137a:link, span.MsoHyperlink
138 {color:blue;
139 text-decoration:underline;}
140a:visited, span.MsoHyperlinkFollowed
141 {color:purple;
142 text-decoration:underline;}
143span.ActionItemOwner
144 {
145 color:green;
146 text-decoration:underline;}
147p.Bullet101, li.Bullet101, div.Bullet101
148 {
149 margin-top:0in;
150 margin-right:0in;
151 margin-bottom:6.0pt;
152 margin-left:.75in;
153 text-indent:-.25in;
154 text-autospace:none;
155 font-size:10.0pt;
156 font-family:Verdana;}
157p.Numbered101, li.Numbered101, div.Numbered101
158 {
159 margin-top:0in;
160 margin-right:0in;
161 margin-bottom:6.0pt;
162 margin-left:.5in;
163 text-indent:-.25in;
164 font-size:10.0pt;
165 font-family:Verdana;}
166ol
167 {margin-bottom:0in;}
168ul
169 {margin-bottom:0in;}
170-->
171</style>
172</head>
173
174<body bgcolor=cornsilk lang=EN-US link=blue vlink=purple>
175
176<div class=Section1>
177
178<p class=MsoNormal><b><span
179style='font-size:18.0pt;'>Java GUI Builders</span></b></p>
180
181<p class=MsoNormal>By Mitch Stuart</p>
182
183<p class=MsoNormal>Copyright 2005 <a
184href="http://www.fullspan.com/">FullSpan Software</a> - Usage subject to <a
185href="http://www.fullspan.com/shared/license.html">license</a></span></p>
186
187<p class=MsoNormal>Document Version:
1881.4, 06-Apr-2005</p>
189
190<p class=MsoNormal>&nbsp;</p>
191
192<p class=MsoNormal>&nbsp;</p>
193
194<p class=MsoNormal><b><span
195style='font-size:16.0pt;'>Contents</span></b></p>
196
197<p class=MsoNormal>&nbsp;</p>
198
199<p class=MsoToc1><span
200class=MsoHyperlink><a href="#_Toc100514583">1<span style='font-size:12.0pt;
201font-family:"Times New Roman";color:windowtext;text-decoration:none;'>        </span>Introduction<span
202style='color:windowtext;display:none;text-decoration:none;'>  </span><span
203style='color:windowtext;display:none;text-decoration:none;'>1</span></a></span></p>
204
205<p class=MsoToc2><span
206class=MsoHyperlink><a href="#_Toc100514584">1.1<span style='font-size:12.0pt;
207font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>Discussion
208Thread<span style='color:windowtext;display:none;text-decoration:
209none;'>  </span><span
210style='color:windowtext;display:none;text-decoration:none;'>1</span></a></span></p>
211
212<p class=MsoToc2><span
213class=MsoHyperlink><a href="#_Toc100514585">1.2<span style='font-size:12.0pt;
214font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>Evaluation Scope
215and Methodology<span style='color:windowtext;display:none;
216text-decoration:none;'>  </span><span
217style='color:windowtext;display:none;text-decoration:none;'>1</span></a></span></p>
218
219<p class=MsoToc2><span
220class=MsoHyperlink><a href="#_Toc100514586">1.3<span style='font-size:12.0pt;
221font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>Evaluation
222Criteria<span style='color:windowtext;display:none;text-decoration:
223none;'>  </span><span
224style='color:windowtext;display:none;text-decoration:none;'>2</span></a></span></p>
225
226<p class=MsoToc1><span
227class=MsoHyperlink><a href="#_Toc100514587">2<span style='font-size:12.0pt;
228font-family:"Times New Roman";color:windowtext;text-decoration:none;'>      </span>GUI Builder Background<span
229style='color:windowtext;display:none;text-decoration:none;'>. </span><span
230style='color:windowtext;display:none;text-decoration:none;'>2</span></a></span></p>
231
232<p class=MsoToc2><span
233class=MsoHyperlink><a href="#_Toc100514588">2.1<span style='font-size:12.0pt;
234font-family:"Times New Roman";color:windowtext;text-decoration:none;'>        </span>GUI Components: Swing
235vs. SWT<span style='color:windowtext;display:none;text-decoration:
236none;'>  </span><span
237style='color:windowtext;display:none;text-decoration:none;'>2</span></a></span></p>
238
239<p class=MsoToc2><span
240class=MsoHyperlink><a href="#_Toc100514589">2.2<span style='font-size:12.0pt;
241font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>Layout Managers<span
242style='color:windowtext;display:none;text-decoration:none;'>3</span></a></span></p>
243
244<p class=MsoToc2><span
245class=MsoHyperlink><a href="#_Toc100514590">2.3<span style='font-size:12.0pt;
246font-family:"Times New Roman";color:windowtext;text-decoration:none;'>        </span>Tool Types<span
247style='color:windowtext;display:none;text-decoration:none;'>4</span></a></span></p>
248
249<p class=MsoToc2><span
250class=MsoHyperlink><a href="#_Toc100514591">2.4<span style='font-size:12.0pt;
251font-family:"Times New Roman";color:windowtext;text-decoration:none;'>        </span>GUI Definition
252Storage<span style='color:windowtext;display:none;text-decoration:
253none;'>  </span><span
254style='color:windowtext;display:none;text-decoration:none;'>5</span></a></span></p>
255
256<p class=MsoToc1><span
257class=MsoHyperlink><a href="#_Toc100514592">3<span style='font-size:12.0pt;
258font-family:"Times New Roman";color:windowtext;text-decoration:none;'>        </span>Recommended Products<span
259style='color:windowtext;display:none;text-decoration:none;'>5</span></a></span></p>
260
261<p class=MsoToc1><span
262class=MsoHyperlink><a href="#_Toc100514593">4<span style='font-size:12.0pt;
263font-family:"Times New Roman";color:windowtext;text-decoration:none;'>      </span>Product Summary<span
264style='color:windowtext;display:none;text-decoration:none;'>. </span><span
265style='color:windowtext;display:none;text-decoration:none;'>6</span></a></span></p>
266
267<p class=MsoToc1><span
268class=MsoHyperlink><a href="#_Toc100514594">5<span style='font-size:12.0pt;
269font-family:"Times New Roman";color:windowtext;text-decoration:none;'>      </span>Product Details<span
270style='color:windowtext;display:none;text-decoration:none;'>9</span></a></span></p>
271
272<p class=MsoToc2><span
273class=MsoHyperlink><a href="#_Toc100514595">5.1<span style='font-size:12.0pt;
274font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>Swing Designer<span
275style='color:windowtext;display:none;text-decoration:none;'>9</span></a></span></p>
276
277<p class=MsoToc2><span
278class=MsoHyperlink><a href="#_Toc100514596">5.2<span style='font-size:12.0pt;
279font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>NetBeans<span
280style='color:windowtext;display:none;text-decoration:none;'>11</span></a></span></p>
281
282<p class=MsoToc2><span
283class=MsoHyperlink><a href="#_Toc100514597">5.3<span style='font-size:12.0pt;
284font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>JFormDesigner<span
285style='color:windowtext;display:none;text-decoration:none;'>13</span></a></span></p>
286
287<p class=MsoToc2><span
288class=MsoHyperlink><a href="#_Toc100514598">5.4<span style='font-size:12.0pt;
289font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>FormLayoutMaker<span
290style='color:windowtext;display:none;text-decoration:none;'>14</span></a></span></p>
291
292<p class=MsoToc2><span
293class=MsoHyperlink><a href="#_Toc100514599">5.5<span style='font-size:12.0pt;
294font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>Foam<span
295style='color:windowtext;display:none;text-decoration:none;'>  </span><span
296style='color:windowtext;display:none;text-decoration:none;'>15</span></a></span></p>
297
298<p class=MsoToc2><span
299class=MsoHyperlink><a href="#_Toc100514600">5.6<span style='font-size:12.0pt;
300font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>Jigloo<span
301style='color:windowtext;display:none;text-decoration:none;'>  </span><span
302style='color:windowtext;display:none;text-decoration:none;'>16</span></a></span></p>
303
304<p class=MsoToc2><span
305class=MsoHyperlink><a href="#_Toc100514601">5.7<span style='font-size:12.0pt;
306font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>JBuilder<span
307style='color:windowtext;display:none;text-decoration:none;'>16</span></a></span></p>
308
309<p class=MsoToc2><span
310class=MsoHyperlink><a href="#_Toc100514602">5.8<span style='font-size:12.0pt;
311font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>Eclipse Visual
312Editor<span
313style='color:windowtext;display:none;text-decoration:none;'>17</span></a></span></p>
314
315<p class=MsoToc2><span
316class=MsoHyperlink><a href="#_Toc100514603">5.9<span style='font-size:12.0pt;
317font-family:"Times New Roman";color:windowtext;text-decoration:none;'>             </span>Jvider<span
318style='color:windowtext;display:none;text-decoration:none;'>17</span></a></span></p>
319
320<p class=MsoToc1><span
321class=MsoHyperlink><a href="#_Toc100514604">6<span style='font-size:12.0pt;
322font-family:"Times New Roman";color:windowtext;text-decoration:none;'>      </span>Wish List<span
323style='color:windowtext;display:none;text-decoration:none;'>18</span></a></span></p>
324
325<p class=MsoToc1><span
326class=MsoHyperlink><a href="#_Toc100514605">7<span style='font-size:12.0pt;
327font-family:"Times New Roman";color:windowtext;text-decoration:none;'>      </span>Example Code<span
328style='color:windowtext;display:none;text-decoration:none;'>  </span><span
329style='color:windowtext;display:none;text-decoration:none;'>18</span></a></span></p>
330
331<p class=MsoToc1><span
332class=MsoHyperlink><a href="#_Toc100514606">8<span style='font-size:12.0pt;
333font-family:"Times New Roman";color:windowtext;text-decoration:none;'>      </span>Revision History<span
334style='color:windowtext;display:none;text-decoration:none;'>. </span><span
335style='color:windowtext;display:none;text-decoration:none;'>18</span></a></span></p>
336
337<p class=MsoNormal>&nbsp;</p>
338
339<h1><a name="_Toc100514583">1<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
340</span>Introduction</a></h1>
341
342<p class=MsoNormal>This article
343discusses and compares tools for building Graphical User Interfaces (GUIs) in
344Java.  It describes my experiences and
345results in trying to find tools for rapid development of Java GUIs.</p>
346
347<p class=MsoNormal>&nbsp;</p>
348
349<h2><a name="_Toc100514584">1.1<span style='font:7.0pt "Times New Roman"'>&nbsp;
350</span>Discussion Thread</a></h2>
351
352<p class=MsoNormal>There is a <a
353href="http://www.javalobby.org/java/forums/t17948">JavaLobby discussion thread</a>
354for this article, where you can view and post comments and questions.</span></p>
355
356<p class=MsoNormal>&nbsp;</p>
357
358<h2><a name="_Toc100514585">1.2<span style='font:7.0pt "Times New Roman"'>&nbsp;
359</span>Evaluation Scope and Methodology</a></h2>
360
361<p class=MsoNormal>Using web searches,
362I identified more than 20 Java GUI builders to investigate.  I read each product web site to determine
363the feature set, licensing, and pricing. 
364I did other web searches to find existing reviews or opinions of the
365products, and also to discern vendor/community robustness.  In this step, I eliminated some of the
366products from further consideration (see the <a href="#_Product_Summary">Product
367Summary</a> for information on why some of the products were not selected).</span></p>
368
369<p class=MsoNormal>&nbsp;</p>
370
371<p class=MsoNormal>With the remaining
372set of finalist products, I downloaded and installed each one.  Then I tested them by creating panels with
373various sets of components.</p>
374
375<p class=MsoNormal>&nbsp;</p>
376
377<h2><a name="_Toc100514586">1.3<span style='font:7.0pt "Times New Roman"'>&nbsp;
378</span>Evaluation Criteria</a></h2>
379
380<p class=MsoNormal>I did not use a formal evaluation matrix or checklist.  However, the following items were considered
381when evaluating each tool:</p>
382
383<p class=MsoNormal>&nbsp;</p>
384
385<p class=Bullet101><span style='font-family:Symbol'>·<span
386style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
387</span></span>Quality of resulting GUI.  Does it look professional and organized?  For example, do all the fields line up
388properly?  Does the form behave properly
389when resized (for example, expanding any growable fields as appropriate).</p>
390
391<p class=Bullet101><span style='font-family:Symbol'>·<span
392style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
393</span></span>Development productivity for application development.  How quickly can you go from a &quot;blank
394slate&quot; to a working application?</p>
395
396<p class=Bullet101><span style='font-family:Symbol'>·<span
397style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
398</span></span>Development productivity for maintenance.  For example, let's say you have created an
399application with a form.  Now you need
400to modify the form to add a couple of new components (labels, text boxes,
401etc.).  Is the mechanism for maintenance
402/ editing of the form consistent with the original development?  Or do you have to use different techniques
403when modifying existing forms?</p>
404
405<p class=Bullet101><span style='font-family:Symbol'>·<span
406style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
407</span></span>Cost and other business considerations.  Is the product commercial, free, open
408source?  Is it being actively developed
409/ maintained?  Is the vendor and/or
410community robust?</p>
411
412<p class=MsoNormal>&nbsp;</p>
413
414<h1><a name="_Toc100514587">2<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
415</span>GUI Builder Background</a></h1>
416
417<p class=MsoNormal>Before jumping into the product discussion, in this section
418I will present some technical background that will be useful in understanding
419the similarities and differences between the GUI builder products.</p>
420
421<p class=MsoNormal>&nbsp;</p>
422
423<h2><a name="_Toc100514588">2.1<span style='font:7.0pt "Times New Roman"'>&nbsp;
424</span>GUI Components: Swing vs. SWT</a></h2>
425
426<p class=MsoNormal><a href="http://java.sun.com/products/jfc/">Swing</a> is the
427&quot;built-in&quot; GUI component technology of the Java platform.  Swing is the successor to the <a
428href="http://java.sun.com/products/jdk/awt/">AWT</a> technology that was
429provided with the early releases of the Java platform.  In one sense, Swing replaces AWT.  For example, in a Swing program you would
430use <a
431href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JTextField.html">javax.swing.JTextField</a></span>
432instead of <a
433href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/TextField.html">java.awt.TextField</a></span>.  In another sense, Swing builds on AWT:
434JTextField is a descendant of <a
435href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Container.html">java.awt.Container</a></span>,
436and many non-component AWT classes (such as layout managers) are used in Swing
437programming.</p>
438
439<p class=MsoNormal>&nbsp;</p>
440
441<p class=MsoNormal><a href="http://www.eclipse.org/swt/">SWT</a> (the Standard
442Widget Toolkit) is an alternative (competing) GUI component technology that is
443part of the <a href="http://www.eclipse.org/">Eclipse</a> project.  There is a large and growing community that
444advocates SWT over Swing for Java GUI programming.</p>
445
446<p class=MsoNormal>&nbsp;</p>
447
448<p class=MsoNormal>In my own programming, I prefer using Swing, so this article
449focuses on tools that work with Swing. 
450If a tool happens to support SWT also, I will mention that fact (if I'm
451aware of it), but I have not tested the SWT capabilities of any of these tools.</p>
452
453<p class=MsoNormal>&nbsp;</p>
454
455<h2><a name="_Toc100514589">2.2<span style='font:7.0pt "Times New Roman"'>&nbsp;
456</span>Layout Managers</a></h2>
457
458<p class=MsoNormal>One of the key decisions in determining how your forms will
459look, and how easy it will be to create and maintain them, is what layout
460manager you use.  It is quite common to
461have multiple panels and nested panels within a single form and certainly
462within a full application.  So you may
463use several different layout managers. 
464But for your &quot;mainstream&quot; forms with labels, data entry
465fields, etc. that you need to layout and line up, you will likely use a complex
466layout manager that allows you to layout many components cleanly in relation to
467each other.</p>
468
469<p class=MsoNormal>&nbsp;</p>
470
471<p class=MsoNormal>Here is an overview of some common layout managers:</p>
472
473<p class=MsoNormal>&nbsp;</p>
474
475<p class=Bullet101><span style='font-family:Symbol'>·<span
476style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
477</span></span><b>Simple layouts</b>.  BorderLayout, BoxLayout, CardLayout,
478FlowLayout, and other similar layouts are simple layout managers that are
479suitable for laying out a small number of components or nested panels.  These are very simple to use and tend to
480have only a small number of properties to set. 
481For example, for FlowLayout you can set the alignment, horizontal gap,
482and vertical gap.</p>
483
484<p class=Bullet101><span style='font-family:Symbol'>·<span
485style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
486</span></span><b>GridBagLayout</b>.  A complex layout manager that is part of the
487standard Java distribution.  If you are
488building a complex Java GUI, and not using a third-party layout manager, you
489will tend to end up using this layout. 
490It is very flexible but difficult to work with (there is an amusing
491animation called <a href="http://madbean.com/blog/2004/17/totallygridbag.html">Totally
492GridBag</a> illustrating this).  One of
493the key criteria for evaluating a GUI builder is determining how much it
494simplifies the process of working with GridBagLayout.</p>
495
496<p class=Bullet101><span style='font-family:Symbol'>·<span
497style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
498</span></span><b>SpringLayout</b>.  A simple but powerful layout manager that is
499part of the standard Java distribution (as of Java 1.4.x).  Sun's <a
500href="http://java.sun.com/docs/books/tutorial/uiswing/layout/spring.html">Java
501tutorial</a> says: &quot;The SpringLayout class was added in v 1.4 to support
502layout in GUI builders.&quot;  However,
503of the GUI builders that I looked at, only Swing Designer currently supports
504SpringLayout, as far as I can tell.<br>
505<br>
506In <a href="http://www.softwarereality.com/soapbox/boudreau_interview.jsp">an
507interview</a>, NetBeans team member Tim Boudreau seemed to indicate that there
508would be SpringLayout support in NetBeans 4.1. 
509However, in a <a
510href="http://java.sun.com/developer/community/chat/JavaLive/2004/jl1116.html">chat
511session</a>, NetBeans team member Larry Baron stated &quot;The Form editor from
5124.0 will migrate unchanged to 4.1. We are looking at improvements in releases
513past NB 4.1&quot;.<br>
514<br>
515So although SpringLayout looks intriguing, it does not yet seem to have
516sufficient support among GUI builders to have a major impact on the evaluation
517here.</p>
518
519<p class=Bullet101><span style='font-family:Symbol'>·<span
520style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
521</span></span><b>FormLayout</b>.  A third-party open source layout manager
522from <a href="http://www.jgoodies.com/freeware/forms/">JGoodies</a>.  FormLayout has capabilities similar to
523GridBagLayout, but is much simpler to use. 
524The JGoodies Forms package includes not only the FormLayout layout
525manager itself, but also a set of &quot;builders&quot; (non-visual helper
526classes) to assist in building panels. 
527FormLayout seems to have the broadest support among GUI builders of any
528of the third-party layout managers.</p>
529
530<p class=Bullet101><span style='font-family:Symbol'>·<span
531style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
532</span></span><b>Other layouts</b>.  There are other layout managers capable of
533laying out complex forms, like <a
534href="http://www.clearthought.info/software/TableLayout/">TableLayout</a>, <a
535href="http://www.zookitec.com/explicitlayout.html">ExplicitLayout</a>, <a
536href="http://www.onjava.com/pub/a/onjava/2002/09/18/relativelayout.html">RelativeLayout</a>,
537<a href="http://easylayout.sohlman.com/index.html">EasyLayout</a>, and <a
538href="http://www.javaworld.com/javaworld/javatips/jw-javatip129.html">SGLayout</a>.  However, these do not have broad support
539among the tools evaluated here, so these layout managers are not considered in
540detail.</p>
541
542<p class=MsoNormal>&nbsp;</p>
543
544<p class=MsoNormal>For me, the choice of the &quot;main&quot; layout manager
545for my applications comes down to FormLayout vs. GridBagLayout.  If I am building forms using pure code with
546no GUI builder, there is no contest: FormLayout wins hands down.  It gives the best results and the highest
547productivity.  If I am using a GUI
548builder, then the choice is not as clear. 
549I would still prefer to use FormLayout, but there are excellent GUI
550builders for both FormLayout and GridBagLayout.</p>
551
552<p class=MsoNormal>&nbsp;</p>
553
554<h2><a name="_Toc100514590">2.3<span style='font:7.0pt "Times New Roman"'>&nbsp;
555</span>Tool Types</a></h2>
556
557<p class=MsoNormal>There are different types of GUI builders:</p>
558
559<p class=MsoNormal>&nbsp;</p>
560
561<p class=Bullet101><span style='font-family:Symbol'>·<span
562style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
563</span></span>Full IDE.  A
564full integrated development environment for building the GUI, developing the
565supporting code, and &quot;wiring together&quot; the GUI with event handling
566and other related tasks.  Examples
567include the Eclipse Visual Editor, NetBeans, JBuilder, and JDeveloper.</p>
568
569<p class=Bullet101><span style='font-family:Symbol'>·<span
570style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
571</span></span>IDE plug-in.  A
572GUI editor designed specifically to work within an IDE.  Examples include Swing Designer, Jigloo, and
573Jvider.<br>
574<br>
575Strictly speaking, the Eclipse Visual Editor is also an IDE plug-in, since it
576is not provided with the base Eclipse download, but must be downloaded
577separately.  However, I put it in the
578Full IDE category because it is provided by the same &quot;vendor&quot;
579(eclipse.org) as the IDE itself.</p>
580
581<p class=Bullet101><span style='font-family:Symbol'>·<span
582style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
583</span></span>WYSIWYG editor. 
584A panel builder that gives a &quot;what you see is what you get&quot;
585editing view.  Generally you drop
586components onto a panel and move them around. 
587After the panel looks right, you go through some code generation or
588other integration step to make the panel available to your Java code.  Examples include JFormDesigner and Foam.</p>
589
590<p class=Bullet101><span style='font-family:Symbol'>·<span
591style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
592</span></span>Non-WYSIWYG editor. 
593A panel builder that helps you build panels by grouping components and
594setting properties, but without the immediate visual feedback you get with a
595WYSIWYG editor.  These tools usually
596have a &quot;preview&quot; button so that as you are building your panel, you
597can view the result without having to integrate the panel into a complete
598program.  Examples include
599FormLayoutMaker and SpeedJG.</p>
600
601<p class=Bullet101><span style='font-family:Symbol'>·<span
602style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
603</span></span>Pure code. A library intended to ease or improve GUI
604development, without providing a visual tool. 
605The focus of this article is to find a visual tool, so such libraries
606are not covered in detail here. 
607Although the pure code approach sounds more primitive than using a
608visual designer, some programmers feel that it is better than visual
609development, because the common code can be factored out more easily, and you
610do not get the code &quot;bloat&quot; that is typical with GUI code generators.  An example of a pure code approach is the
611PanelBuilder class provided with the JGoodies Forms package.</p>
612
613<p class=MsoNormal>&nbsp;</p>
614
615<h2><a name="_Toc100514591">2.4<span style='font:7.0pt "Times New Roman"'>&nbsp;
616</span>GUI Definition Storage</a></h2>
617
618<p class=MsoNormal>Once you have defined your GUI, in what format does the GUI
619builder save it?</p>
620
621<p class=MsoNormal>&nbsp;</p>
622
623<p class=Bullet101><span style='font-family:Symbol'>·<span
624style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
625</span></span>Pure code.  The
626tool generates Java code to create the GUI, and parses Java code to read it
627into the visual editor.  It does not
628save any files other than the Java code. 
629Examples are the Swing Designer, the Eclipse Visual Editor, and
630Jigloo.  Sometimes a tool will include
631special comments in the generated Java code to help it read back the code and
632display it in the visual editor.</p>
633
634<p class=Bullet101><span style='font-family:Symbol'>·<span
635style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
636</span></span>Code and metadata. 
637The tool generates metadata describing the forms, as well as Java code
638to display the forms.  An example is
639NetBeans, which saves the form definition in .form files and generates code in
640.java files.  The .form files live in
641the same directory as the corresponding .java file.<br>
642<br>
643Tools that use metadata differ on whether they depend on the metadata at design
644time only, or at design time and run time. 
645For example, NetBeans uses its .form files only at design time; the
646runtime is pure Java code.  In contrast,
647Foam uses its .gui_xml files at design time and runtime.  As another example, JFormDesigner gives you
648a choice.  It creates .jfd files with
649the form design.  You have a choice of
650whether to deploy the .jfd files and a (royalty-free) runtime library to load
651the files, or you can choose to generate runtime code that has no dependency on
652the .jfd files.</p>
653
654<p class=MsoNormal>&nbsp;</p>
655
656<h1><a name="_Toc100514592">3<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
657</span>Recommended Products</a></h1>
658
659<p class=MsoNormal>My evaluation resulted in me selecting one overall
660&quot;best&quot; tool for most of my Java GUI work: Swing Designer.  I also identified several other excellent
661tools that I would be happy to use, depending on the requirements of the
662project in question.</p>
663
664<p class=MsoNormal>&nbsp;</p>
665
666<p class=MsoNormal>I can summarize these recommended products as follows:</p>
667
668<p class=MsoNormal>&nbsp;</p>
669
670<p class=Bullet101><span style='font-family:Symbol'>·<span
671style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
672</span></span><b>Swing Designer</b>: Best overall and best integrated
673solution.</p>
674
675<p class=Bullet101><span style='font-family:Symbol'>·<span
676style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
677</span></span><b>NetBeans</b>:
678Very good overall and best free/open source integrated solution.</p>
679
680<p class=Bullet101><span style='font-family:Symbol'>·<span
681style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
682</span></span><b>JFormDesigner</b>:
683Best pure panel layout tool.</p>
684
685<p class=Bullet101><span style='font-family:Symbol'>·<span
686style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
687</span></span><b>FormLayoutMaker</b>:
688Best free/open source pure panel layout tool.</p>
689
690<p class=Bullet101><span style='font-family:Symbol'>·<span
691style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
692</span></span><b>Foam</b>: Most
693innovative tool.</p>
694
695<p class=MsoNormal>&nbsp;</p>
696
697<p class=MsoNormal>Detailed information and pros/cons of these and the other
698tested products are given in the <a href="#_Product_Details">Product Details</a>
699section.</p>
700
701<p class=MsoNormal>&nbsp;</p>
702
703<p class=MsoNormal>One common theme that emerged from my evaluation is:
704&quot;integration is good&quot;.  I went
705into the project not particularly caring whether I used an IDE's native GUI
706builder, an IDE plug-in, or a standalone product.  As I spent time with the products, I came to believe that tight
707IDE integration is essential to attain the highest productivity.  GUI application building is more than just
708panel building: it involves integrating the panels into the application, and
709dealing with component properties, event handlers, and the &quot;glue&quot;
710between application logic and the GUI.</p>
711
712<p class=MsoNormal>&nbsp;</p>
713
714<h1><a name="_Toc100514593"></a><a name="_Product_Summary"></a>4<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
715</span>Product
716Summary</h1>
717
718<p class=MsoNormal>This table lists all of the products that I
719investigated.  They are divided into 3
720categories:</p>
721
722<p class=MsoNormal>&nbsp;</p>
723
724<p class=Bullet101><span style='font-family:Symbol'>·<span
725style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
726</span></span>Category A. 
727Products that were tested hands-on, and are recommended as my favorites
728among those tested.</p>
729
730<p class=Bullet101><span style='font-family:Symbol'>·<span
731style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
732</span></span>Category B. 
733Products that were tested hands-on, but during testing were found to be
734less suitable than those in Category A.</p>
735
736<p class=Bullet101><span style='font-family:Symbol'>·<span
737style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
738</span></span>Category C. 
739Products that were briefly investigated but were not tested hands-on,
740due to technical or business reasons.</p>
741
742<p class=MsoNormal>&nbsp;</p>
743
744<p class=MsoNormal>Within each category, products are listed in estimated order
745of suitability to my requirements. 
746Please don't put too much weight on the &quot;ranking&quot; or ordering
747of the products in the table.  Instead,
748I suggest that you use my comments as a guide to help you figure out which
749products are worth investigating, based on your own requirements and
750preferences.</p>
751
752<p class=MsoNormal>&nbsp;</p>
753
754<table border=1 cellspacing=0 cellpadding=0 width=619 style='width:6.45in;
755 border-collapse:collapse;border:none;'>
756 <tr>
757 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
758 background:#D98A06;padding:.05in 5.75pt .05in 5.75pt'>
759 <p class=MsoNormal><b><span
760 style='font-size:12.0pt'>#</span></b></p>
761 </td>
762 <td width=192 valign=top style='width:2.0in;border:solid windowtext .5pt;
763 border-left:none;background:#D98A06;
764 padding:.05in 5.75pt .05in 5.75pt'>
765 <p class=MsoNormal><b><span
766 style='font-size:12.0pt'>Product</span></b></p>
767 </td>
768 <td width=372 valign=top style='width:279.0pt;border:solid windowtext .5pt;
769 border-left:none;background:#D98A06;
770 padding:.05in 5.75pt .05in 5.75pt'>
771 <p class=MsoNormal><b><span
772 style='font-size:12.0pt'>Comments</span></b></p>
773 </td>
774 </tr>
775 <tr>
776 <td width=619 colspan=3 valign=top style='width:6.45in;border:solid windowtext .5pt;
777 border-top:none;background:#FBC364;
778 padding:.05in 5.75pt .05in 5.75pt'>
779 <p class=MsoNormal align=center style='text-align:center'><b><span style='font-size:12.0pt'>Category
780 A: Tested hands-on and recommended</span></b></p>
781 </td>
782 </tr>
783 <tr>
784 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
785 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
786 <p class=MsoNormal>1</p>
787 </td>
788 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
789 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
790 padding:.05in 5.75pt .05in 5.75pt'>
791 <p class=MsoNormal><a href="http://www.swing-designer.com/">Instantiations
792 Swing Designer</a></p>
793 <p class=MsoNormal>$199 per developer</p>
794 <p class=MsoNormal>&nbsp;</p>
795 <p class=MsoNormal>Related products: <a href="http://www.swt-designer.com/">SWT
796 Designer</a> ($199), <a href="http://www.windowbuilderpro.com/">WindowBuilder
797 Pro</a> ($299)</p>
798 </td>
799 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
800 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
801 padding:.05in 5.75pt .05in 5.75pt'>
802 <p class=MsoNormal>Best overall and best integrated solution.  See <a href="#_Swing_Designer">Product
803 Details</a>.</p>
804 </td>
805 </tr>
806 <tr>
807 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
808 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
809 <p class=MsoNormal>2</p>
810 </td>
811 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
812 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
813 padding:.05in 5.75pt .05in 5.75pt'>
814 <p class=MsoNormal><a href="http://www.netbeans.org/">NetBeans</a> 4.0</p>
815 <p class=MsoNormal>Free, Open Source (Sun Public License)</p>
816 </td>
817 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
818 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
819 padding:.05in 5.75pt .05in 5.75pt'>
820 <p class=MsoNormal>Very good overall and best free/open source integrated
821 solution.  See <a href="#_NetBeans_1">Product
822 Details</a>.</p>
823 </td>
824 </tr>
825 <tr>
826 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
827 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
828 <p class=MsoNormal>3</p>
829 </td>
830 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
831 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
832 padding:.05in 5.75pt .05in 5.75pt'>
833 <p class=MsoNormal><a href="http://www.jformdesigner.com/">JFormDesigner</a>
834 1.0.2</p>
835 <p class=MsoNormal>$159 per developer for commercial use</p>
836 </td>
837 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
838 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
839 padding:.05in 5.75pt .05in 5.75pt'>
840 <p class=MsoNormal>Best pure panel layout tool.  See <a href="#_JFormDesigner">Product Details</a>.</p>
841 </td>
842 </tr>
843 <tr>
844 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
845 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
846 <p class=MsoNormal>4</p>
847 </td>
848 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
849 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
850 padding:.05in 5.75pt .05in 5.75pt'>
851 <p class=MsoNormal><a href="http://formlayoutmaker.sourceforge.net/">FormLayoutMaker</a>
852 rc7</p>
853 <p class=MsoNormal>Free, Open Source (BSD license)</p>
854 </td>
855 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
856 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
857 padding:.05in 5.75pt .05in 5.75pt'>
858 <p class=MsoNormal>Best free/open source pure panel layout tool.  See <a href="#_FormLayoutMaker">Product
859 Details</a>.</p>
860 </td>
861 </tr>
862 <tr>
863 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
864 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
865 <p class=MsoNormal>5</p>
866 </td>
867 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
868 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
869 padding:.05in 5.75pt .05in 5.75pt'>
870 <p class=MsoNormal><a
871 href="http://www.computersinmotion.com/products_foam.htm">Foam</a> 1.2</p>
872 <p class=MsoNormal>$150 per developer</p>
873 </td>
874 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
875 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
876 padding:.05in 5.75pt .05in 5.75pt'>
877 <p class=MsoNormal>Most innovative tool. 
878 See <a href="#_Foam">Product Details</a>.</p>
879 </td>
880 </tr>
881 <tr>
882 <td width=619 colspan=3 valign=top style='width:6.45in;border:solid windowtext .5pt;
883 border-top:none;background:#FBC364;
884 padding:.05in 5.75pt .05in 5.75pt'>
885 <p class=MsoNormal align=center style='text-align:center'><b><span style='font-size:12.0pt'>Category
886 B: Tested hands-on</span></b></p>
887 </td>
888 </tr>
889 <tr>
890 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
891 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
892 <p class=MsoNormal>6</p>
893 </td>
894 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
895 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
896 padding:.05in 5.75pt .05in 5.75pt'>
897 <p class=MsoNormal><a href="http://cloudgarden.com/jigloo/">Jigloo</a> 3.1.0
898 (pre-release)</p>
899 <p class=MsoNormal>Free for non-commercial use; $75 per developer for
900 commercial use</p>
901 </td>
902 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
903 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
904 padding:.05in 5.75pt .05in 5.75pt'>
905 <p class=MsoNormal>Not as polished as the leading products.  See <a href="#_Jigloo">Product Details</a>.</p>
906 </td>
907 </tr>
908 <tr>
909 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
910 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
911 <p class=MsoNormal>7</p>
912 </td>
913 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
914 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
915 padding:.05in 5.75pt .05in 5.75pt'>
916 <p class=MsoNormal><a href="http://www.borland.com/jbuilder/">JBuilder</a>
917 2005 Foundation</p>
918 <p class=MsoNormal>Foundation edition is free (including for commercial
919 use).  Developer edition is $500 and
920 Enterprise edition is $3,500.</p>
921 </td>
922 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
923 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
924 padding:.05in 5.75pt .05in 5.75pt'>
925 <p class=MsoNormal>No compelling benefit over NetBeans.  See <a href="#_JBuilder">Product Details</a>.</p>
926 </td>
927 </tr>
928 <tr>
929 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
930 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
931 <p class=MsoNormal>8</p>
932 </td>
933 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
934 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
935 padding:.05in 5.75pt .05in 5.75pt'>
936 <p class=MsoNormal><a href="http://www.eclipse.org/vep/">Eclipse Visual
937 Editor</a> 1.0.2</p>
938 <p class=MsoNormal>Free, Open Source (Eclipse License)</p>
939 </td>
940 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
941 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
942 padding:.05in 5.75pt .05in 5.75pt'>
943 <p class=MsoNormal>Not ready for prime time. 
944 See <a href="#_Eclipse_Visual_Editor">Product Details</a>.</p>
945 <p class=MsoNormal>&nbsp;</p>
946 </td>
947 </tr>
948 <tr>
949 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
950 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
951 <p class=MsoNormal>9</p>
952 </td>
953 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
954 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
955 padding:.05in 5.75pt .05in 5.75pt'>
956 <p class=MsoNormal><a href="http://www.jvider.com/">Jvider</a> 1.7</p>
957 <p class=MsoNormal>$69 per developer</p>
958 </td>
959 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
960 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
961 padding:.05in 5.75pt .05in 5.75pt'>
962 <p class=MsoNormal>Integration is not rich enough.  See <a href="#_Jvider">Product Details</a>.</p>
963 </td>
964 </tr>
965 <tr>
966 <td width=619 colspan=3 valign=top style='width:6.45in;border:solid windowtext .5pt;
967 border-top:none;background:#FBC364;
968 padding:.05in 5.75pt .05in 5.75pt'>
969 <p class=MsoNormal align=center style='text-align:center'><b><span style='font-size:12.0pt'>Category
970 C: Not tested hands-on</span></b></p>
971 </td>
972 </tr>
973 <tr>
974 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
975 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
976 <p class=MsoNormal>10</p>
977 </td>
978 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
979 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
980 padding:.05in 5.75pt .05in 5.75pt'>
981 <p class=MsoNormal><a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a></p>
982 <p class=MsoNormal>$499 </p>
983 </td>
984 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
985 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
986 padding:.05in 5.75pt .05in 5.75pt'>
987 <p class=MsoNormal>A full IDE with an integrated GUI builder.  At design time, uses XY and Grid-based
988 layouts for component positioning. 
989 Stores form definitions in XML .form files.  Gives the option of generating compiled Java classes for the
990 GUI, or Java source code.</p>
991 <p class=MsoNormal>&nbsp;</p>
992 <p class=MsoNormal>The website states &quot;The GUI Designer does not create
993 a main frame for an application, nor does it create menus&quot;.  It seems strange that you would have to
994 manually create menus and a top-level container such as a JFrame in an
995 integrated product.</p>
996 <p class=MsoNormal>&nbsp;</p>
997 <p class=MsoNormal>Appears to use its own layout manager(s) as opposed to
998 standard ones like GridBagLayout. 
999 This is probably a good thing for development productivity, but it may
1000 cause some concern about code portability (for example, if you decided to
1001 change IDEs, or if IntelliJ maintenance became unavailable).</p>
1002 <p class=MsoNormal>&nbsp;</p>
1003 <p class=MsoNormal>On the other hand, I have <a
1004 href="http://www.javalobby.org/java/forums/m91829214">been informed</a> that
1005 the IDEA layout manager is open source (I have not personally verified
1006 this).  This would certainly ease the
1007 concern about vendor &quot;lock in&quot;
1008 Also, there is a third-party <a
1009 href="http://plugins.intellij.net/plugins/view/?id=GuiSource">plug-in</a>
1010 that can convert the .form files to Java source code, including the option to
1011 use GridBagLayout (again, I have not verified this capability).</p>
1012 </td>
1013 </tr>
1014 <tr>
1015 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1016 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1017 <p class=MsoNormal>11</p>
1018 </td>
1019 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1020 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1021 padding:.05in 5.75pt .05in 5.75pt'>
1022 <p class=MsoNormal><a href="https://abeille.dev.java.net/">Abeille Forms
1023 Designer</a></p>
1024 <p class=MsoNormal>Free, Open Source (LGPL license for Designer, BSD license
1025 for Runtime)</p>
1026 </td>
1027 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1028 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1029 padding:.05in 5.75pt .05in 5.75pt'>
1030 <p class=MsoNormal>One of the better open source choices.  Supports JGoodies FormLayout.  Comparing Abeille and FormLayoutMaker, I
1031 gave a slight edge to FormLayoutMaker, but I think Abeille would still be
1032 worth investigating.</p>
1033 <p class=MsoNormal>&nbsp;</p>
1034 <p class=MsoNormal>I got some <a
1035 href="http://www.javalobby.org/java/forums/m91829430.html">feedback</a>
1036 stating that Abeille is actually superior to FormLayoutMaker, but
1037 unfortunately I do not currently have time to do a hands-on test of Abeille.</p>
1038 </td>
1039 </tr>
1040 <tr>
1041 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1042 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1043 <p class=MsoNormal>12</p>
1044 </td>
1045 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1046 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1047 padding:.05in 5.75pt .05in 5.75pt'>
1048 <p class=MsoNormal><a href="http://www.swingempire.de/palace/FormBuilder/">SwingEmpire
1049 FormBuilder</a></p>
1050 <p class=MsoNormal>Seems to be free, license not clear; site states that
1051 there will eventually be a commercial version</p>
1052 </td>
1053 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1054 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1055 padding:.05in 5.75pt .05in 5.75pt'>
1056 <p class=MsoNormal>GUI builder for JGoodies FormLayout.  Not a WYSIWYG editor, but a form builder
1057 with preview.</p>
1058 </td>
1059 </tr>
1060 <tr>
1061 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1062 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1063 <p class=MsoNormal>13</p>
1064 </td>
1065 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1066 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1067 padding:.05in 5.75pt .05in 5.75pt'>
1068 <p class=MsoNormal><a href="http://radical.sourceforge.net/">Radical</a></p>
1069 <p class=MsoNormal>Free, Open Source (Apache license for standalone version;
1070 GPL for jEdit plugin)</p>
1071 </td>
1072 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1073 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1074 padding:.05in 5.75pt .05in 5.75pt'>
1075 <p class=MsoNormal>An open source WYSIWYG GUI builder that uses the
1076 TableLayout layout engine.  Has a
1077 dialog that appears to provide full coverage for setting component
1078 properties.  Generates code.</p>
1079 <p class=MsoNormal>&nbsp;</p>
1080 <p class=MsoNormal>Runs as either a standalone tool or a jEdit plugin.</p>
1081 <p class=MsoNormal>&nbsp;</p>
1082 <p class=MsoNormal>I prefer to use FormLayout instead of TableLayout, so I
1083 would tend to select FormLayoutMaker or Abeille over Radical.  Other than that, Radical looks like it's
1084 worth investigating.</p>
1085 </td>
1086 </tr>
1087 <tr>
1088 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1089 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1090 <p class=MsoNormal>14</p>
1091 </td>
1092 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1093 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1094 padding:.05in 5.75pt .05in 5.75pt'>
1095 <p class=MsoNormal><a href="http://www.wsoftware.de/SpeedJG/">SpeedJG</a></p>
1096 <p class=MsoNormal>$69 per developer</p>
1097 </td>
1098 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1099 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1100 padding:.05in 5.75pt .05in 5.75pt'>
1101 <p class=MsoNormal>The approach is to build a GUI using XML as the representation.  It is not a WYSIWYG editor, you create the
1102 XML using their easy-to-use IDE, then click &quot;Test&quot; to see the
1103 generated GUI.</p>
1104 <p class=MsoNormal>&nbsp;</p>
1105 <p class=MsoNormal>Looks intriguing and well done, but I did not test because
1106 I am more interested in a visual editor.</p>
1107 </td>
1108 </tr>
1109 <tr>
1110 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1111 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1112 <p class=MsoNormal>15</p>
1113 </td>
1114 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1115 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1116 padding:.05in 5.75pt .05in 5.75pt'>
1117 <p class=MsoNormal><a href="http://www.oracle.com/technology/products/jdev/">Oracle
1118 JDeveloper</a></p>
1119 <p class=MsoNormal>It is a bit confusing to find pricing information.  At the <a
1120 href="http://oraclestore.oracle.com/">Oracle Store</a>, there is a product
1121 called &quot;JDeveloper - Named User Plus Perpetual&quot; listed at $995.</p>
1122 </td>
1123 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1124 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1125 padding:.05in 5.75pt .05in 5.75pt'>
1126 <p class=MsoNormal>Originally based (circa 1997) on Borland's JBuilder,
1127 similarities between the two products can still be clearly seen in the GUI
1128 builder (e.g., support for XYLayout).</p>
1129 <p class=MsoNormal>&nbsp;</p>
1130 <p class=MsoNormal>There are many features that make JDeveloper stand out,
1131 but from a pure GUI builder standpoint, there is no compelling benefit over
1132 NetBeans.  Since the JDeveloper GUI
1133 builder was originally based on JBuilder, see the comments about JBuilder in <a
1134 href="#_JBuilder">Product Details</a>.</p>
1135 </td>
1136 </tr>
1137 <tr>
1138 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1139 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1140 <p class=MsoNormal>16</p>
1141 </td>
1142 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1143 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1144 padding:.05in 5.75pt .05in 5.75pt'>
1145 <p class=MsoNormal><a href="http://www.reportmill.com/ribs/">Ribs</a></p>
1146 <p class=MsoNormal>Could not find pricing</p>
1147 </td>
1148 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1149 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1150 padding:.05in 5.75pt .05in 5.75pt'>
1151 <p class=MsoNormal>Looks like it was never officially released (still in
1152 preview).  Uses absolute positioning
1153 and sizes.</p>
1154 </td>
1155 </tr>
1156 <tr>
1157 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1158 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1159 <p class=MsoNormal>17</p>
1160 </td>
1161 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1162 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1163 padding:.05in 5.75pt .05in 5.75pt'>
1164 <p class=MsoNormal><a href="http://www.openabacus.org/">AbaGuiBuilder</a></p>
1165 <p class=MsoNormal>Free, Open Source (GPL)</p>
1166 </td>
1167 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1168 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1169 padding:.05in 5.75pt .05in 5.75pt'>
1170 <p class=MsoNormal>Claims to be &quot;Under Development&quot; but seems to be
1171 actively worked on.  Both design time
1172 and runtime are GPL licensed.  Design
1173 time GPL is OK, but runtime GPL is a showstopper for me, so I did not test.</p>
1174 </td>
1175 </tr>
1176 <tr>
1177 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1178 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1179 <p class=MsoNormal>18</p>
1180 </td>
1181 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1182 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1183 padding:.05in 5.75pt .05in 5.75pt'>
1184 <p class=MsoNormal><a href="http://www.jdc-software.com/products.php">LayoutBuilder</a></p>
1185 <p class=MsoNormal>$99 per developer</p>
1186 <p class=MsoNormal>&nbsp;</p>
1187 </td>
1188 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1189 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1190 padding:.05in 5.75pt .05in 5.75pt'>
1191 <p class=MsoNormal>Appears to support only &quot;standard&quot; layout
1192 managers (GridBagLayout, FlowLayout, etc.). 
1193 Thus it is less interesting than standalone layout tools like
1194 JFormDesigner that support JGoodies FormLayout.</p>
1195 </td>
1196 </tr>
1197 <tr>
1198 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1199 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1200 <p class=MsoNormal>19</p>
1201 </td>
1202 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1203 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1204 padding:.05in 5.75pt .05in 5.75pt'>
1205 <p class=MsoNormal><a href="http://www.mars3000.com/">JFrameBuilder</a></p>
1206 <p class=MsoNormal>$67 per developer</p>
1207 </td>
1208 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1209 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1210 padding:.05in 5.75pt .05in 5.75pt'>
1211 <p class=MsoNormal>Generates code, seems to be one-way.</p>
1212 </td>
1213 </tr>
1214 <tr>
1215 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1216 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1217 <p class=MsoNormal>20</p>
1218 </td>
1219 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1220 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1221 padding:.05in 5.75pt .05in 5.75pt'>
1222 <p class=MsoNormal><a href="https://www.ratundtat.com/produkte_eng/main.htm">JBeaver</a></p>
1223 <p class=MsoNormal>49 Euros</p>
1224 </td>
1225 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1226 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1227 padding:.05in 5.75pt .05in 5.75pt'>
1228 <p class=MsoNormal>The site says &quot;A free trial version of JBeaver is
1229 downloadable from this website&quot; but I could not find the download
1230 link.  The screenshot of the Design
1231 view looks very nice.  Supports
1232 JGoodies FormLayout.</p>
1233 </td>
1234 </tr>
1235 <tr>
1236 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1237 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1238 <p class=MsoNormal>21</p>
1239 </td>
1240 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1241 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1242 padding:.05in 5.75pt .05in 5.75pt'>
1243 <p class=MsoNormal><a href="http://uic.sourceforge.net/">User Interface
1244 Compiler</a></p>
1245 <p class=MsoNormal>Seems to be free, license not clear</p>
1246 </td>
1247 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1248 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1249 padding:.05in 5.75pt .05in 5.75pt'>
1250 <p class=MsoNormal>Uses <a
1251 href="http://doc.trolltech.com/3.3/designer-manual.html">Qt Designer</a> as
1252 the designer, then compiles it into (?) XML.</p>
1253 </td>
1254 </tr>
1255 <tr>
1256 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1257 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1258 <p class=MsoNormal>22</p>
1259 </td>
1260 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1261 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1262 padding:.05in 5.75pt .05in 5.75pt'>
1263 <p class=MsoNormal><a href="http://www.ics.com/getbxjava/">BX for Java</a></p>
1264 <p class=MsoNormal>Pricing not clear, perhaps $998 per developer</p>
1265 </td>
1266 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1267 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1268 padding:.05in 5.75pt .05in 5.75pt'>
1269 <p class=MsoNormal>Too expensive for me.</p>
1270 </td>
1271 </tr>
1272 <tr>
1273 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1274 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1275 <p class=MsoNormal>23</p>
1276 </td>
1277 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1278 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1279 padding:.05in 5.75pt .05in 5.75pt'>
1280 <p class=MsoNormal><a href="http://www.ist-inc.com/visaj/">Visaj</a></p>
1281 <p class=MsoNormal>$995 per developer</p>
1282 </td>
1283 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1284 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1285 padding:.05in 5.75pt .05in 5.75pt'>
1286 <p class=MsoNormal>Too expensive for me.</p>
1287 </td>
1288 </tr>
1289 <tr>
1290 <td width=55 valign=top style='width:41.4pt;border:solid windowtext .5pt;
1291 border-top:none;padding:.05in 5.75pt .05in 5.75pt'>
1292 <p class=MsoNormal>24</p>
1293 </td>
1294 <td width=192 valign=top style='width:2.0in;border-top:none;border-left:none;
1295 border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1296 padding:.05in 5.75pt .05in 5.75pt'>
1297 <p class=MsoNormal><a href="http://www.jeasy.de/">JEasy</a></p>
1298 <p class=MsoNormal>780 Euros for distributable Pro version</p>
1299 </td>
1300 <td width=372 valign=top style='width:279.0pt;border-top:none;border-left:
1301 none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
1302 padding:.05in 5.75pt .05in 5.75pt'>
1303 <p class=MsoNormal>Too expensive for me.</p>
1304 </td>
1305 </tr>
1306</table>
1307
1308<p class=MsoNormal>&nbsp;</p>
1309
1310<h1><a name="_Toc100514594"></a><a name="_Product_Details"></a>5<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1311</span>Product
1312Details</h1>
1313
1314<p class=MsoNormal>This section contains detailed information on all the
1315products that I tested hands-on.</p>
1316
1317<h2><a name="_Toc100514595"></a><a name="_NetBeans"></a><a
1318name="_Swing_Designer"></a>5.1<span
1319style='font:7.0pt "Times New Roman"'>&nbsp; </span>Swing Designer</h2>
1320
1321<p class=MsoNormal><a href="http://www.swing-designer.com/">Instantiations
1322Swing Designer</a> 4.0</p>
1323
1324<p class=MsoNormal>Price/License: $199 per developer</p>
1325
1326<p class=MsoNormal>Related products: <a href="http://www.swt-designer.com/">SWT
1327Designer</a> for SWT developers ($199) and <a
1328href="http://www.windowbuilderpro.com/">WindowBuilder Pro</a> with both Swing
1329and SWT support ($299).</p>
1330
1331<p class=MsoNormal>&nbsp;</p>
1332
1333<p class=MsoNormal>Swing Designer is an Eclipse plug-in.  It operates by generating and parsing Java
1334code; there are no separate form definition files.  Swing Designer supports standard Java layouts including
1335GridBagLayout and SpringLayout, and has recently introduced support for
1336JGoodies FormLayout.</p>
1337
1338<p class=MsoNormal>&nbsp;</p>
1339
1340<p class=MsoNormal>There are some nice <a
1341href="http://www.instantiations.com/swt-designer/demos.html">demos</a> on the
1342website.</p>
1343
1344<p class=MsoNormal>&nbsp;</p>
1345
1346<p class=MsoNormal>When building a form in Swing Designer, the workflow is as
1347follows:</p>
1348
1349<p class=MsoNormal>&nbsp;</p>
1350
1351<p class=Bullet101><span style='font-family:Symbol'>·<span
1352style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1353</span></span>Create a class based on one of the supported visual
1354classes (JPanel, JFrame, etc.)</p>
1355
1356<p class=Bullet101><span style='font-family:Symbol'>·<span
1357style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1358</span></span>Set the layout manager for the panel</p>
1359
1360<p class=Bullet101><span style='font-family:Symbol'>·<span
1361style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1362</span></span>Drop components from the palette onto the panel; drag
1363them around on the panel to position them</p>
1364
1365<p class=Bullet101><span style='font-family:Symbol'>·<span
1366style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1367</span></span>Use the Layout Assistant or other provided tools
1368(described below), set layout properties for the components</p>
1369
1370<p class=Bullet101><span style='font-family:Symbol'>·<span
1371style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1372</span></span>Use the component properties editor to set the visual
1373(e.g., font, color) and code generation (e.g., variable name) properties</p>
1374
1375<p class=Bullet101><span style='font-family:Symbol'>·<span
1376style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1377</span></span>Add event handlers (for example, handling button
1378clicks)</p>
1379
1380<p class=MsoNormal>&nbsp;</p>
1381
1382<p class=MsoNormal>The design view is WYSIWYG, and there is also a preview
1383button to show the designed panel in an example JFrame container.</p>
1384
1385<p class=MsoNormal>&nbsp;</p>
1386
1387<p class=MsoNormal>Swing Designer has excellent support for JGoodies
1388FormLayout.  With FormLayout, dropping
1389and moving components is easy and precise. 
1390The row/column grid gives you the overall context of the container.  As you mouse over the cells in the grid,
1391they are highlighted to show which one you are over, and whether it is valid to
1392drop the component there.</p>
1393
1394<p class=MsoNormal>&nbsp;</p>
1395
1396<p class=MsoNormal>Pasting components is especially nice: when you execute the
1397Paste command, the mouse cursor becomes an arrow with a + sign, and you can
1398click on any valid cell to paste the component.  Imagine the common case where you have a new panel and you need
1399to quickly add 10 field labels.  Just
1400create one label, copy it, then paste it 9 times, edit the text and you're
1401done.  Swing Designer supports in-place
1402editing of the component text (e.g., the labels in this example).</p>
1403
1404<p class=MsoNormal>&nbsp;</p>
1405
1406<p class=MsoNormal>All of the FormLayout constraints/layout properties are
1407supported for rows, columns, and cells. 
1408You can edit these properties in several ways, depending on which is
1409most convenient for any given situation:</p>
1410
1411<p class=MsoNormal>&nbsp;</p>
1412
1413<p class=Bullet101><span style='font-family:Symbol'>·<span
1414style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1415</span></span>Use the Layout Assistant, a popup window that lets you
1416set the row, column, and cell properties for the currently selected
1417component.  Because the Assistant is
1418non-modal, you can set the properties for a component, then click on another
1419one and set its properties, and so on. 
1420You can also select multiple components to set properties for all of
1421them at the same time.</p>
1422
1423<p class=Bullet101><span style='font-family:Symbol'>·<span
1424style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1425</span></span>Use the Alignment Figures, small buttons that alllow
1426you to quickly set the vertical and horizontal alignment or fill.</p>
1427
1428<p class=Bullet101><span style='font-family:Symbol'>·<span
1429style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1430</span></span>Use the Row/Column Editor, a dialog that shows all the
1431rows or columns in the layout so you can quickly edit them in a tabular
1432fashion.</p>
1433
1434<p class=Bullet101><span style='font-family:Symbol'>·<span
1435style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1436</span></span>Use the context (right-click) menu on row or column
1437headers to insert rows or columns, quickly adjust their properties, or invoke
1438the Row/Column editor.</p>
1439
1440<p class=Bullet101><span style='font-family:Symbol'>·<span
1441style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1442</span></span>Use the component properties editor to set the layout
1443constraints.</p>
1444
1445<p class=MsoNormal>&nbsp;</p>
1446
1447<p class=MsoNormal>Swing Designer also has good support for GridBagLayout,
1448although I did not spend as much time testing it because I prefer to use
1449FormLayout.  When you drop or move a
1450component, the designer shows you the existing GridBag cells, plus new cells
1451where the component can be dropped.  The
1452new cells are not only along the edges of the layout, but in between every
1453existing row and column.  This makes
1454layout very productive because you can add new rows and columns on the fly,
1455without having to manually &quot;make room&quot; by moving existing components.</p>
1456
1457<p class=MsoNormal>&nbsp;</p>
1458
1459<p class=MsoNormal>Components are created as local variables by default.  You can tell Swing Designer to create a
1460member variable for a given component by using the &quot;Expose component&quot;
1461context menu option.  Or you can set a
1462preference to automatically create every component as a field.</p>
1463
1464<p class=MsoNormal>&nbsp;</p>
1465
1466<p class=MsoNormal>Creating event handlers is simple: for example, just
1467double-click on a button to create its event handler and view/edit the
1468source.  More generally, you can
1469right-click any component, select the Implement context menu, and then choose
1470any event supported by that component to implement its handler.  You can set a preference to specify the
1471naming convention for generated event handler methods.</p>
1472
1473<p class=MsoNormal>&nbsp;</p>
1474
1475<p class=MsoNormal>Swing Designer has good support for menus and toolbars.  I was able to quickly add these elements to
1476the main JFrame of my test application, and automatically create stubs for
1477their actionPerformed handlers.</p>
1478
1479<p class=MsoNormal>&nbsp;</p>
1480
1481<p class=MsoNormal><b>When to use Swing
1482Designer</b></p>
1483
1484<p class=MsoNormal>Swing Designer hits the mark perfectly for me: it is an
1485Eclipse plug-in with tight IDE integration; it has a fantastic visual designer;
1486it has excellent support for JGoodies FormLayout; and it is reasonably
1487priced.  Therefore, Swing Designer is my
1488first choice for my GUI work.</p>
1489
1490<p class=MsoNormal>&nbsp;</p>
1491
1492<p class=MsoNormal><b>Pros</b></p>
1493
1494<p class=Bullet101><span style='font-family:Symbol'>·<span
1495style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1496</span></span>The best visual designer (fast, flexible, and
1497full-featured) of any IDE or IDE plug-in that I tested.</p>
1498
1499<p class=Bullet101><span style='font-family:Symbol'>·<span
1500style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1501</span></span>Excellent JGoodies FormLayout support, which leads to
1502higher development productivity and better user interfaces.</p>
1503
1504<p class=Bullet101><span style='font-family:Symbol'>·<span
1505style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1506</span></span>Very broad and deep support for many different layouts
1507and components.</p>
1508
1509<p class=Bullet101><span style='font-family:Symbol'>·<span
1510style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1511</span></span>Seamless Eclipse integration: component properties,
1512code generation, etc.</p>
1513
1514<p class=MsoNormal>&nbsp;</p>
1515
1516<p class=MsoNormal><b>Cons</b></p>
1517
1518<p class=Bullet101><span style='font-family:Symbol'>·<span
1519style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1520</span></span>The first time you launch the designer in a given
1521Eclipse session, it is rather slow to start (10 or 15 seconds on my
1522machine).  This is not much of an issue
1523because once the designer is started, it is very fast - I never felt that it
1524lagged behind during visual editing.</p>
1525
1526<p class=Bullet101><span style='font-family:Symbol'>·<span
1527style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1528</span></span>I did encounter some rough edges (bugs and other
1529issues).  However, the vendor provided
1530excellent support, often with a same-day or next-day patch or workaround.</p>
1531
1532<p class=Bullet101><span style='font-family:Symbol'>·<span
1533style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1534</span></span>The documentation and website could use some polishing
1535up - they don't reflect the completeness and quality of the product.</p>
1536
1537<p class=MsoNormal>&nbsp;</p>
1538
1539<h2><a name="_Toc100514596"></a><a name="_NetBeans_1"></a>5.2<span style='font:7.0pt "Times New Roman"'>&nbsp;
1540</span>NetBeans</h2>
1541
1542<p class=MsoNormal><a href="http://www.netbeans.org/">NetBeans</a> 4.0</p>
1543
1544<p class=MsoNormal>Price/License: Free, Open Source (Sun Public License)</p>
1545
1546<p class=MsoNormal>&nbsp;</p>
1547
1548<p class=MsoNormal>NetBeans is a competitor to Eclipse as a full featured open
1549source IDE.  I am an avid Eclipse user,
1550and I never considered trying NetBeans before this project.  People have strong feelings about which IDE
1551is best, but this article is not a general IDE discussion.</p>
1552
1553<p class=MsoNormal>&nbsp;</p>
1554
1555<p class=MsoNormal>In this article we are focusing on the GUI-building
1556capability of the tools, and in this respect, NetBeans is clearly superior to
1557Eclipse.  My comments (as with all the
1558product details in this section) apply to the specific versions that I tested:
1559NetBeans 4.0 vs. Eclipse Visual Editor 1.0.2 running in Eclipse 3.0.1.  These were the latest production releases
1560available at the time I tested.</p>
1561
1562<p class=MsoNormal>&nbsp;</p>
1563
1564<p class=MsoNormal>When building a form in NetBeans, the workflow is very
1565similar to the workflow described above for Swing Designer.  The main difference is how the components
1566are positioned on the panel (described in detail below).  Also, what Swing Designer calls the Layout
1567Assistant is known as the Layout Customizer in NetBeans.</p>
1568
1569<p class=MsoNormal>&nbsp;</p>
1570
1571<p class=MsoNormal>The design view is WYSIWYG, and there is also a preview
1572button to show the designed panel in a mock JFrame.</p>
1573
1574<p class=MsoNormal>&nbsp;</p>
1575
1576<p class=MsoNormal>In NetBeans, when you drop a component on the form, you
1577cannot control the original placement of the component - no matter where you
1578drop it, it will go into a new cell. 
1579This is not as friendly as (for example) Swing Designer or Eclipse
1580Visual Editor, which allow you to place the component in any cell.  There is a similar issue when you copy and
1581paste a component: the pasted component sits in the same cell as the copied
1582component.  So, after dropping or
1583pasting, you then need to use the GridBag customizer to place the component
1584where you want it.  This is a major
1585hindrance to productivity because you need to switch between the design view
1586and the customizer view for each component you need to position. It is true
1587that you can drop or paste multiple components (say 5 of them) in design view,
1588and then go to the customizer and move those components.  But this is still not ideal because it would
1589be better to drag-and-position or paste-and-position in the same view.</p>
1590
1591<p class=MsoNormal>&nbsp;</p>
1592
1593<p class=MsoNormal>On the other hand, the NetBeans GridBag customizer is much
1594better than the one in the Eclipse Visual Editor.  It has more properties that you can set and is easier to use.</p>
1595
1596<p class=MsoNormal>&nbsp;</p>
1597
1598<p class=MsoNormal>At one point, I had a problem when moving components in the
1599customizer and going back to the design view - the layout was garbled with
1600overlapping components.  But then I just
1601needed to expand the size of the container (a JPanel) so that everything fit,
1602then the layout looked correct again. 
1603This seems to be a common issue (not specific to NetBeans) with the GridBagLayout
1604at both design and run time: you need to make sure your container is big
1605enough.  The way that I deal with this
1606at runtime is to calculate the minimum size needed to properly display each
1607panel, and then restrict the main JFrame so that the user cannot resize it
1608smaller than this minimum.</p>
1609
1610<p class=MsoNormal>&nbsp;</p>
1611
1612<p class=MsoNormal>A technique described in the NetBeans documentation is to
1613start building a form using the AbsoluteLayout, which allows positioning of
1614each component.  Then convert to
1615GridBagLayout for proper resizing behavior. 
1616I found this approach more frustrating than just building with
1617GridBagLayout from the start.</p>
1618
1619<p class=MsoNormal>&nbsp;</p>
1620
1621<p class=MsoNormal>The NetBeans GUI builder is not as powerful as some of the
1622other products, but its tight integration with the overall IDE makes it
1623convenient and productive to use.</p>
1624
1625<p class=MsoNormal>&nbsp;</p>
1626
1627<p class=MsoNormal><b>When to use NetBeans</b></p>
1628
1629<p class=MsoNormal>If I wanted to build a full application (panels, menus,
1630toolbars) with an integrated open source IDE, without adding any external
1631plug-ins, NetBeans would be the best choice.</p>
1632
1633<p class=MsoNormal>&nbsp;</p>
1634
1635<p class=MsoNormal><b>Pros</b></p>
1636
1637<p class=Bullet101><span style='font-family:Symbol'>·<span
1638style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1639</span></span>Excellent integration betwen the form designer and the
1640overall code development process.  In
1641particular, setting properties, code generation options, and event handling are
1642very fast, easy, and complete.</p>
1643
1644<p class=Bullet101><span style='font-family:Symbol'>·<span
1645style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1646</span></span>Good designer for GridBagLayout, although not as good
1647as Swing Designer or Eclipse Visual Editor.</p>
1648
1649<p class=Bullet101><span style='font-family:Symbol'>·<span
1650style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1651</span></span>The best layout customizer for GridBagLayout.</p>
1652
1653<p class=MsoNormal>&nbsp;</p>
1654
1655<p class=MsoNormal><b>Cons</b></p>
1656
1657<p class=Bullet101><span style='font-family:Symbol'>·<span
1658style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1659</span></span>My perception is that NetBeans has been losing the open
1660source market share / mind share IDE battle with Eclipse (on the other hand,
1661there is <a href="http://cld.blog-city.com/read/1126337.htm">some evidence</a>
1662of a <a href="http://www.javalobby.org/java/forums/m91828413">NetBeans
1663resurgence</a>).  My guess is that
1664future releases of the Eclipse Visual Editor may provide much stronger
1665competition.  Still, I'm not worried
1666about getting &quot;locked in&quot; with NetBeans, because it is open source,
1667and the generated code is standard Java.</p>
1668
1669<p class=Bullet101><span style='font-family:Symbol'>·<span
1670style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1671</span></span>Does not support FormLayout or other replacement for
1672GridBagLayout (i.e., you are pretty much forced to use GridBagLayout for
1673complex forms if you want to use NetBeans' integration).</p>
1674
1675<p class=Bullet101><span style='font-family:Symbol'>·<span
1676style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1677</span></span>Cannot move components in design view using drag and
1678drop, need to go into customizer to move.</p>
1679
1680<p class=Bullet101><span style='font-family:Symbol'>·<span
1681style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1682</span></span>No &quot;undo&quot; or &quot;cancel&quot; in
1683GridBagLayout customizer.</p>
1684
1685<p class=MsoNormal>&nbsp;</p>
1686
1687<h2><a name="_Toc100514597"></a><a name="_JFormDesigner"></a>5.3<span style='font:7.0pt "Times New Roman"'>&nbsp;
1688</span>JFormDesigner</h2>
1689
1690<p class=MsoNormal><a href="http://www.jformdesigner.com/">JFormDesigner</a>
16911.0.2</p>
1692
1693<p class=MsoNormal>Price/License: $159 per developer for commercial use</p>
1694
1695<p class=MsoNormal>&nbsp;</p>
1696
1697<p class=MsoNormal>JFormDesigner is a very polished and professional tool.  It does an absolutely outstanding job of
1698helping you layout panels.  With the
1699excellent FormLayout support, it is almost trivial to drag your components into
1700place and get your layout looking good. 
1701However, once you save your files (.jfd form files and .java code files)
1702from JFormDesigner, you are &quot;on your own&quot; - there is no integration
1703with development environments like Eclipse or NetBeans.</p>
1704
1705<p class=MsoNormal>&nbsp;</p>
1706
1707<p class=MsoNormal>There is a nice <a href="http://www.jformdesigner.com/demos/">Flash
1708demo</a> available on the website.</p>
1709
1710<p class=MsoNormal>&nbsp;</p>
1711
1712<p class=MsoNormal>JFormDesigner supports standard Swing layout managers plus
1713the third-party FormLayout and TableLayout. 
1714The support for JGoodies FormLayout (layout manager) and JGoodies Looks
1715(look and feels) is extensive.  JGoodies
1716FormLayout is my favorite layout manager, and JGoodies Looks is my favorite
1717look and feel, so support for these is a big plus.  You can build a really professional looking application with
1718JFormDesigner, JGoodies FormLayout, and JGoodies Looks.</p>
1719
1720<p class=MsoNormal>&nbsp;</p>
1721
1722<p class=MsoNormal>In JFormDesigner, you create your form by dragging
1723components in the design view.  The tool
1724saves the form definition in .jfd files which live alongside Java code.  Then there is a generate code step that can
1725translate the .jfd files to Java code. 
1726You have a choice of whether to deploy your forms as .jfd files, which
1727are parsed at runtime, or as .java code. 
1728If you use .jfd files, you also need to deploy the JFD parser JAR file
1729with your product, however this is royalty-free.</p>
1730
1731<p class=MsoNormal>&nbsp;</p>
1732
1733<p class=MsoNormal>Because the form editor (JFormDesigner) and code editor
1734(Eclipse or vi or whatever editor you use) are separate, you have to be careful
1735about collisions when saving files.  The
1736documentation says: &quot;As long as you follow the following rule, you will
1737never have a problem:  Save the Java
1738file in the IDE before saving the form in JFormDesigner.&quot;</p>
1739
1740<p class=MsoNormal>&nbsp;</p>
1741
1742<p class=MsoNormal><b>When to use
1743JFormDesigner</b></p>
1744
1745<p class=MsoNormal>If I had to create a large number of panels quickly and
1746productively, and I was not concerned with IDE integration, I would use
1747JFormDesigner with FormLayout.</p>
1748
1749<p class=MsoNormal>&nbsp;</p>
1750
1751<p class=MsoNormal><b>Pros</b></p>
1752
1753<p class=Bullet101><span style='font-family:Symbol'>·<span
1754style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1755</span></span>Supports standard layout managers (including
1756GridBagLayout), plus FormLayout and TableLayout.</p>
1757
1758<p class=Bullet101><span style='font-family:Symbol'>·<span
1759style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1760</span></span>Has extensive additional support for JGoodies Forms
1761(FormLayout and related classes) and Looks (look and feels).</p>
1762
1763<p class=Bullet101><span style='font-family:Symbol'>·<span
1764style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1765</span></span>The best visual designer for FormLayout.</p>
1766
1767<p class=MsoNormal>&nbsp;</p>
1768
1769<p class=MsoNormal><b>Cons</b></p>
1770
1771<p class=Bullet101><span style='font-family:Symbol'>·<span
1772style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1773</span></span>No IDE integration.</p>
1774
1775<p class=Bullet101><span style='font-family:Symbol'>·<span
1776style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1777</span></span>No event handling code generation.</p>
1778
1779<p class=Bullet101><span style='font-family:Symbol'>·<span
1780style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1781</span></span>No support for externalizing strings (e.g., label or
1782button text).</p>
1783
1784<p class=MsoNormal>&nbsp;</p>
1785
1786<h2><a name="_Toc100514598"></a><a name="_FormLayoutMaker"></a>5.4<span style='font:7.0pt "Times New Roman"'>&nbsp;
1787</span>FormLayoutMaker</h2>
1788
1789<p class=MsoNormal><a href="http://formlayoutmaker.sourceforge.net/">FormLayoutMaker</a>
1790rc7</p>
1791
1792<p class=MsoNormal>Price/License: Free, Open Source (BSD license)</p>
1793
1794<p class=MsoNormal>&nbsp;</p>
1795
1796<p class=MsoNormal>FormLayoutMaker is a non-WYSIWYG designer specifically for
1797the <a href="http://www.jgoodies.com/freeware/forms/">FormLayout</a> layout
1798manager.  You add components to a grid,
1799which does not look like your final panel - it is just a visual representation
1800of the position of the components within the grid.  After you drop your components, you can hit the preview button to
1801see what the actual panel will look like. 
1802Once your panel is looking good, you can save the XML layout file and
1803the Java code.</p>
1804
1805<p class=MsoNormal>&nbsp;</p>
1806
1807<p class=MsoNormal>Another open source panel builder worth looking at is <a
1808href="https://abeille.dev.java.net/">Abeille Forms Designer</a>; please see the
1809comments about Abeille in the <a href="#_Product_Summary">Product Summary</a>.</p>
1810
1811<p class=MsoNormal>&nbsp;</p>
1812
1813<p class=MsoNormal><b>When to use
1814FormLayoutMaker</b></p>
1815
1816<p class=MsoNormal>If I wanted an open source tool to help me build panels
1817using FormLayout.  FormLayoutMaker is
1818not as polished as JFormDesigner, but it will probably hit the sweet spot for a
1819lot of open source developers.</p>
1820
1821<p class=MsoNormal>&nbsp;</p>
1822
1823<p class=MsoNormal><b>Pros</b></p>
1824
1825<p class=Bullet101><span style='font-family:Symbol'>·<span
1826style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1827</span></span>Good visualization of the structure of the layout with
1828the grid view.</p>
1829
1830<p class=Bullet101><span style='font-family:Symbol'>·<span
1831style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1832</span></span>Easy preview for visualization of the actual layout.</p>
1833
1834<p class=Bullet101><span style='font-family:Symbol'>·<span
1835style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1836</span></span>Good support for FormLayout (although the support is
1837not as advanced as in JFormDesigner).</p>
1838
1839<p class=MsoNormal>&nbsp;</p>
1840
1841<p class=MsoNormal><b>Cons</b></p>
1842
1843<p class=Bullet101><span style='font-family:Symbol'>·<span
1844style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1845</span></span>No IDE integration.</p>
1846
1847<p class=Bullet101><span style='font-family:Symbol'>·<span
1848style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1849</span></span>No support for setting properties, event handling, etc.</p>
1850
1851<p class=MsoNormal>&nbsp;</p>
1852
1853<h2><a name="_Toc100514599"></a><a name="_Foam"></a>5.5<span style='font:7.0pt "Times New Roman"'>&nbsp;
1854</span>Foam</h2>
1855
1856<p class=MsoNormal><a href="http://www.computersinmotion.com/products_foam.htm">Foam</a>
18571.2</p>
1858
1859<p class=MsoNormal>Price/License: $150 per developer</p>
1860
1861<p class=MsoNormal>&nbsp;</p>
1862
1863<p class=MsoNormal>Foam is a delight to use - it feels different than every
1864other tool I evaluated.  As I was using
1865it, I was thinking &quot;this is easy!&quot; and &quot;this is fun!&quot;.  It is probably the fastest for laying out a
1866panel of any tool that I tested.  You
1867drag a component from the palette onto the design view, and it shows you
1868crosshairs and anchor points so you can align it and &quot;snap&quot; it to certain
1869predefined points, like the edge or center of other components.  This was the most natural feeling designer I
1870tried.</p>
1871
1872<p class=MsoNormal>&nbsp;</p>
1873
1874<p class=MsoNormal>There are some excellent <a
1875href="http://www.computersinmotion.com/cgi-bin/homeframeload.pl?formname=foamdemos">Flash
1876demos</a> available on the website.</p>
1877
1878<p class=MsoNormal>&nbsp;</p>
1879
1880<p class=MsoNormal>The form design is saved in an XML file.  A runtime JAR (royalty-free) parses the file
1881and renders the form.</p>
1882
1883<p class=MsoNormal>&nbsp;</p>
1884
1885<p class=MsoNormal>My concern with Foam is the proprietary nature of the
1886runtime engine: if the vendor decides to no longer maintain the product, you
1887are stuck with the latest release.  This
1888is troublesome when compared to other products:</p>
1889
1890<p class=MsoNormal>&nbsp;</p>
1891
1892<p class=Bullet101><span style='font-family:Symbol'>·<span
1893style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1894</span></span>For open source products, this is not a concern,
1895because you can (in theory at least) fix the bug yourself, or try to organize
1896community support with other users.</p>
1897
1898<p class=Bullet101><span style='font-family:Symbol'>·<span
1899style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1900</span></span>For other commercial products, like JFormDesigner, it
1901is true that the designer is proprietary. 
1902But the runtime is &quot;open&quot; in the sense that JFormDesigner can
1903generate standard Java code that does not refer to the form design metadata at
1904runtime.  Therefore, in the worst case,
1905you could hand-edit the generated code if support for the tool was no longer
1906available.</p>
1907
1908<p class=MsoNormal>&nbsp;</p>
1909
1910<p class=MsoNormal>These options are not available with a proprietary runtime
1911engine.</p>
1912
1913<p class=MsoNormal>&nbsp;</p>
1914
1915<p class=MsoNormal><b>When to use Foam</b></p>
1916
1917<p class=MsoNormal>If I had to quickly prototype a set of panels, for example
1918for an application design proposal, Foam would be the quickest way to do so.</p>
1919
1920<p class=MsoNormal>&nbsp;</p>
1921
1922<p class=MsoNormal><b>Pros</b></p>
1923
1924<p class=Bullet101><span style='font-family:Symbol'>·<span
1925style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1926</span></span>Probably the quickest for prototyping.  Absolutely slick environment.</p>
1927
1928<p class=Bullet101><span style='font-family:Symbol'>·<span
1929style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1930</span></span>Makes it simple to develop very structured and elegant
1931panels without knowing details of layout management.</p>
1932
1933<p class=MsoNormal>&nbsp;</p>
1934
1935<p class=MsoNormal><b>Cons</b></p>
1936
1937<p class=Bullet101><span style='font-family:Symbol'>·<span
1938style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1939</span></span>Proprietary runtime.</p>
1940
1941<p class=Bullet101><span style='font-family:Symbol'>·<span
1942style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1943</span></span>No IDE integration.</p>
1944
1945<p class=Bullet101><span style='font-family:Symbol'>·<span
1946style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1947</span></span>No copy and paste of components in the design view.</p>
1948
1949<p class=MsoNormal>&nbsp;</p>
1950
1951<h2><a name="_Toc100514600"></a><a name="_Jigloo"></a>5.6<span style='font:7.0pt "Times New Roman"'>&nbsp;
1952</span>Jigloo</h2>
1953
1954<p class=MsoNormal><a href="http://cloudgarden.com/jigloo/">Jigloo</a> 3.1.0
1955(pre-release)</p>
1956
1957<p class=MsoNormal>Price/License: Free for non-commercial use; $75 per
1958developer for commercial use</p>
1959
1960<p class=MsoNormal>&nbsp;</p>
1961
1962<p class=MsoNormal>Jigloo works by generating and parsing Java code
1963(&quot;round trip code generation&quot;). 
1964It is an Eclipse plug-in, not a standalone product.</p>
1965
1966<p class=MsoNormal>&nbsp;</p>
1967
1968<p class=MsoNormal>Jigloo supports both Swing and SWT.  For Swing, it supports standard layout
1969managers, plus Jigloo AnchorLayout and JGoodies FormLayout.  For SWT, it supports standard SWT layouts
1970including FormLayout (the SWT FormLayout is not related to the JGoodies
1971FormLayout, except that they unfortunately have the same name).</p>
1972
1973<p class=MsoNormal>&nbsp;</p>
1974
1975<p class=MsoNormal>Visual editing was OK, but not as smooth and polished as
1976Swing Designer or JFormDesigner.  It was
1977hard to lay things out properly.  The
1978grid only appears when mousing over the panel, and I found this grid harder to
1979work with than (for example) Swing Designer or the NetBeans GridBag
1980customizer.  JGoodies FormLayout support
1981is not as advanced as Swing Designer or JFormDesigner; for example, Jigloo does
1982not automatically insert spacer rows and columns.</p>
1983
1984<p class=MsoNormal>&nbsp;</p>
1985
1986<h2><a name="_Toc100514601"></a><a name="_JBuilder"></a>5.7<span style='font:7.0pt "Times New Roman"'>&nbsp;
1987</span>JBuilder</h2>
1988
1989<p class=MsoNormal><a href="http://www.borland.com/jbuilder/">JBuilder</a> 2005
1990Foundation</p>
1991
1992<p class=MsoNormal>Price/License: Foundation: free (including for commercial
1993use); Developer: $500; Enterprise: $3,500</p>
1994
1995<p class=MsoNormal>&nbsp;</p>
1996
1997<p class=MsoNormal>The JBuilder GUI building support is roughly on a par with
1998NetBeans and Eclipse.  Since it does not
1999offer any compelling advantage over the open source alternatives, I did not
2000spend a lot of time with it.</p>
2001
2002<p class=MsoNormal>&nbsp;</p>
2003
2004<p class=MsoNormal>The JBuilder docs suggest starting your layout with the
2005included XYLayout, and then after you get it looking right, convert it to
2006GridBagLayout.  Just as with NetBeans'
2007AbsoluteLayout, I found it simpler to just start with GridBagLayout from the
2008beginning.</p>
2009
2010<p class=MsoNormal>&nbsp;</p>
2011
2012<p class=MsoNormal>Borland offers extensive <a
2013href="http://info.borland.com/techpubs/jbuilder/jbuilder2005/designui/contents.html">documentation</a>
2014on GUI building in JBuilder.  Even if
2015you don't use JBuilder, it is worth reading this documentation, especially if
2016you are using GridBagLayout.  Here are
2017some recommended links:</p>
2018
2019<p class=MsoNormal>&nbsp;</p>
2020
2021<p class=Bullet101><span style='font-family:Symbol'>·<span
2022style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2023</span></span><a
2024href="http://info.borland.com/techpubs/jbuilder/jbuilder2005/designui/i1_layouts.html">Using
2025layout managers</a></p>
2026
2027<p class=Bullet101><span style='font-family:Symbol'>·<span
2028style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2029</span></span><a
2030href="http://info.borland.com/techpubs/jbuilder/jbuilder2005/designui/i7_gridbaglayout.html">GridBagLayout</a></p>
2031
2032<p class=Bullet101><span style='font-family:Symbol'>·<span
2033style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2034</span></span><a
2035href="http://info.borland.com/techpubs/jbuilder/jbuilder2005/designui/k_nestedlayouts.html">Using
2036nested panels and layouts</a></p>
2037
2038<p class=MsoNormal>&nbsp;</p>
2039
2040<h2><a name="_Toc100514602"></a><a name="_Eclipse_Visual_Editor"></a>5.8<span style='font:7.0pt "Times New Roman"'>&nbsp;
2041</span>Eclipse Visual
2042Editor</h2>
2043
2044<p class=MsoNormal><a href="http://www.eclipse.org/vep/">Eclipse Visual Editor</a>
20451.0.2</p>
2046
2047<p class=MsoNormal>Price/License: Free, Open Source (Eclipse License)</p>
2048
2049<p class=MsoNormal>&nbsp;</p>
2050
2051<p class=MsoNormal>On the Eclipse website, the overall Eclipse project is
2052described as: &quot;a kind of universal tool platform - an open extensible IDE
2053for anything and nothing in particular&quot;
2054In that spirit, the Eclipse Visual Editor is described on the website
2055not as a GUI builder, but rather as &quot;a framework for creating GUI
2056builders&quot;.  However, the Visual
2057Editor does come with &quot;reference implementations&quot; of Swing and SWT
2058GUI builders.</p>
2059
2060<p class=MsoNormal>&nbsp;</p>
2061
2062<p class=MsoNormal>Eclipse VE uses Java code generation/parsing.  It is slow to start up.  Sometimes it seems reasonably fast when
2063editing.  But other times, a simple task
2064(like clicking on a component in design view) could take 5 or 15 seconds.  This can be very frustrating.</p>
2065
2066<p class=MsoNormal>&nbsp;</p>
2067
2068<p class=MsoNormal>In Eclipse VE, the process of dropping components is very
2069nice.  You have a grid in the design
2070view and you can drop the component into an existing cell, or into a new cell
2071between any existing cells or on any edge of the grid.  The VE nicely highlights the existing or new
2072cell where the component will be dropped. 
2073However, once you have components in the cells, it is not easy to tell
2074which cell you are working with.</p>
2075
2076<p class=MsoNormal>&nbsp;</p>
2077
2078<p class=MsoNormal>Property and constraint editing is not as smooth as with
2079some other products.  For example, I
2080found it hard to set minimum widths and spacing.  The GridBagLayout customizer is not as advanced as the one in
2081NetBeans.</p>
2082
2083<p class=MsoNormal>&nbsp;</p>
2084
2085<p class=MsoNormal>JSeparator is not on the control palette.  I added one using the generic add JavaBean
2086feature.  The designer accepted it, but
2087I could not see it in the visual editor or the running application.</p>
2088
2089<p class=MsoNormal>&nbsp;</p>
2090
2091<p class=MsoNormal>I had a couple of situations where the layout in the design
2092view did not match the runtime.  Also,
2093somehow the layout got garbled, with components overlapping each other (and I
2094could not find a simple fix like I did in NetBeans).</p>
2095
2096<p class=MsoNormal>&nbsp;</p>
2097
2098<p class=MsoNormal>The bottom line is, I found Eclipse VE to be not acceptable
2099for these reasons:</p>
2100
2101<p class=MsoNormal>&nbsp;</p>
2102
2103<p class=Bullet101><span style='font-family:Symbol'>·<span
2104style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2105</span></span>Response time inconsistent, sometimes frustratingly
2106slow</p>
2107
2108<p class=Bullet101><span style='font-family:Symbol'>·<span
2109style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2110</span></span>Visual design process not as clear as with other
2111products tested</p>
2112
2113<p class=Bullet101><span style='font-family:Symbol'>·<span
2114style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2115</span></span>Layout not reliable (design time not matching runtime,
2116or layout garbled)</p>
2117
2118<p class=MsoNormal>&nbsp;</p>
2119
2120<p class=MsoNormal>In fairness, Eclipse VE is a relatively new product, and I
2121look forward to future versions being much improved.</p>
2122
2123<p class=MsoNormal>&nbsp;</p>
2124
2125<h2><a name="_Toc100514603"></a><a name="_Jvider"></a>5.9<span style='font:7.0pt "Times New Roman"'>&nbsp;
2126</span>Jvider</h2>
2127
2128<p class=MsoNormal><a href="http://www.jvider.com/">Jvider</a> 1.7</p>
2129
2130<p class=MsoNormal>Price/License: $69 per developer</p>
2131
2132<p class=MsoNormal>&nbsp;</p>
2133
2134<p class=MsoNormal>Jvider offers both standalone and Eclipse plugin
2135versions.  The same license can be used
2136for both.  Jvider focuses on being a
2137lightweight, flexible solution instead of a total solution.  For example, not all properties can be set through
2138a property editor, you need to edit code. 
2139It focuses more on the layout of components than the details of each
2140component.  Jvider uses GridBagLayout.</p>
2141
2142<p class=MsoNormal>&nbsp;</p>
2143
2144<p class=MsoNormal>I found that Jvider was too lightweight for me, it did not
2145provide enough properties access.  Since
2146it is using GridBagLayout, I would prefer to use NetBeans which offers a richer
2147and more integrated experience.</p>
2148
2149<p class=MsoNormal>&nbsp;</p>
2150
2151<h1><a name="_Toc100514604">6<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2152</span>Wish List</a></h1>
2153
2154<p class=MsoNormal>As I mentioned earlier, Swing Designer has the best
2155combination of features for my needs. 
2156Many of the other products have great features but are lacking in
2157various ways.  Hopefully over time these
2158products will continue to evolve and improve. 
2159For example:</p>
2160
2161<p class=MsoNormal>&nbsp;</p>
2162
2163<p class=Bullet101><span style='font-family:Symbol'>·<span
2164style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2165</span></span>Add design view component positioning (and ideally,
2166FormLayout support too!) to NetBeans.</p>
2167
2168<p class=Bullet101><span style='font-family:Symbol'>·<span
2169style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2170</span></span>Add IDE integration to JFormDesigner.</p>
2171
2172<p class=Bullet101><span style='font-family:Symbol'>·<span
2173style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2174</span></span>Supply more open licensing for Foam runtime.</p>
2175
2176<p class=Bullet101><span style='font-family:Symbol'>·<span
2177style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2178</span></span>Improve Eclipse Visual Editor robustness.</p>
2179
2180<p class=MsoNormal>&nbsp;</p>
2181
2182<h1><a name="_Toc100514605">7<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2183</span>Example Code</a></h1>
2184
2185<p class=MsoNormal>For an example of a GUI built with Eclipse, Swing Designer,
2186and JGoodies FormLayout, see my <a
2187href="http://www.fullspan.com/proj/jmailsend/">JMailSend</a> project.</p>
2188
2189<p class=MsoNormal>&nbsp;</p>
2190
2191<p class=MsoNormal>For an example of a GUI built with NetBeans and
2192GridBagLayout, see my <a href="http://www.fullspan.com/proj/hashgui/">HashGUI</a>
2193project.</p>
2194
2195<p class=MsoNormal>&nbsp;</p>
2196
2197<p class=MsoNormal>For an example of a GUI built with hand coding (no GUI
2198builder) using FormLayout, see my <a href="http://www.fullspan.com/proj/pwkeep/">PWKeep</a>
2199project.  I wish that I had thought to
2200look for a GUI builder when I was writing PWKeep - it would have made the form
2201creation process much smoother.</p>
2202
2203<p class=MsoNormal>&nbsp;</p>
2204
2205<h1><a name="_Toc100514606">8<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2206</span>Revision History</a></h1>
2207
2208<p class=MsoNormal>&nbsp;</p>
2209
2210<p class=Bullet101><span style='font-family:Symbol'>·<span
2211style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2212</span></span>1.4 (06-Apr-2005): Minor copy edits.</p>
2213
2214<p class=Bullet101><span style='font-family:Symbol'>·<span
2215style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2216</span></span>1.3 (06-Apr-2005): Added hands-on review of Swing
2217Designer.  Adjusted comments on some
2218other products based on the features of Swing Designer.  Updated IntelliJ IDEA listing with new
2219information about layout manager portability. 
2220Added some comments about how to interpret the &quot;rankings&quot; of
2221products in the table.  Added link to
2222JMailSend project.</p>
2223
2224<p class=Bullet101><span style='font-family:Symbol'>·<span
2225style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2226</span></span>1.2 (26-Mar-2005): Added link to JavaLobby discussion
2227thread.  Moved Swing Designer up in the
2228rankings and added a few comments due to new release that supports JGoodies
2229FormLayout.  Added IntelliJ IDEA to
2230Product Listing.  Added link to
2231SGLayout.  General copy editing.</p>
2232
2233<p class=Bullet101><span style='font-family:Symbol'>·<span
2234style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2235</span></span>1.1 (24-Mar-2005): Added some layout managers to
2236listing.  General copy editing.</p>
2237
2238<p class=Bullet101><span style='font-family:Symbol'>·<span
2239style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2240</span></span>1.0 (19-Mar-2005): Initial revision.</p>
2241
2242<p class=MsoNormal>&nbsp;</p>
2243
2244</div>
2245
2246</body>
2247
2248</html>
Note: See TracBrowser for help on using the repository browser.