<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
<html> | |
<head> | |
<META NAME="keywords" CONTENT="netbeans,magazine,UI,Design,6.0,NetBeans GUI Builder,Matisse,GUI,layout,visual,graphical user interface"> | |
<META NAME="description" CONTENT="NetBeans Magazine: UI Design in NetBeans IDE 6.0 with the NetBeans GUI Builder Matisse"> | |
<meta http-equiv=Content-Type content="text/html; charset=windows-1252"> | |
<title>UI Design in NetBeans IDE 6.0</title> | |
<style> | |
<!-- | |
p.Noparagraphstyle, li.Noparagraphstyle, div.Noparagraphstyle | |
{line-height:120%; | |
text-autospace:none; | |
font-size:12.0pt; | |
font-family:Times; | |
color:black;} | |
p.NB-Corpo, li.NB-Corpo, div.NB-Corpo | |
{text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:.05pt;} | |
p.NB-Interttulo, li.NB-Interttulo, div.NB-Interttulo | |
{line-height:120%; | |
page-break-after:avoid; | |
text-autospace:none; | |
font-size:13.0pt; | |
font-family:"Verdana"; | |
color:#A20018; | |
font-weight:bold;} | |
p.NB-Interttulo2, li.NB-Interttulo2, div.NB-Interttulo2 | |
{line-height:12.0pt; | |
page-break-after:avoid; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:#D0780A; | |
font-weight:bold;} | |
p.NB-Notadica, li.NB-Notadica, div.NB-Notadica | |
{text-align:left; | |
line-height:13.0pt; | |
tab-stops:14.15pt; | |
text-autospace:none; | |
font-size:10.0pt; | |
font-family:"Verdana"; | |
color:#D0780A; | |
letter-spacing:.05pt;} | |
p.NB-Legendaimagem, li.NB-Legendaimagem, div.NB-Legendaimagem | |
{line-height:12.0pt; | |
tab-stops:14.15pt; | |
text-autospace:none; | |
font-size:10.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:.05pt;} | |
span.NB-NegritoTcnico | |
{font-family:"Verdana"; | |
color:black; | |
letter-spacing:.05pt; | |
font-weight:bold; | |
vertical-align:baseline;} | |
span.NB-Legendanegrito | |
{font-weight:bold;} | |
div.NB-Corpo1 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:.05pt;} | |
div.NB-Interttulo1 {line-height:120%; | |
page-break-after:avoid; | |
text-autospace:none; | |
font-size:13.0pt; | |
font-family:"Verdana"; | |
color:#A20018; | |
font-weight:bold;} | |
div.NB-Interttulo21 {line-height:12.0pt; | |
page-break-after:avoid; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:#D0780A; | |
font-weight:bold;} | |
div.NB-Notadica1 {text-align:left; | |
line-height:13.0pt; | |
tab-stops:14.15pt; | |
text-autospace:none; | |
font-size:10.0pt; | |
font-family:"Verdana"; | |
color:#D0780A; | |
letter-spacing:.05pt;} | |
div.Noparagraphstyle1 {line-height:120%; | |
text-autospace:none; | |
font-size:12.0pt; | |
font-family:Times; | |
color:black;} | |
li.NB-Corpo1 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:.05pt;} | |
li.NB-Interttulo1 {line-height:120%; | |
page-break-after:avoid; | |
text-autospace:none; | |
font-size:13.0pt; | |
font-family:"Verdana"; | |
color:#A20018; | |
font-weight:bold;} | |
li.NB-Interttulo21 {line-height:12.0pt; | |
page-break-after:avoid; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:#D0780A; | |
font-weight:bold;} | |
li.NB-Notadica1 {text-align:left; | |
line-height:13.0pt; | |
tab-stops:14.15pt; | |
text-autospace:none; | |
font-size:10.0pt; | |
font-family:"Verdana"; | |
color:#D0780A; | |
letter-spacing:.05pt;} | |
li.Noparagraphstyle1 {line-height:120%; | |
text-autospace:none; | |
font-size:12.0pt; | |
font-family:Times; | |
color:black;} | |
p.NB-Corpo1 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:.05pt;} | |
p.NB-Interttulo1 {line-height:120%; | |
page-break-after:avoid; | |
text-autospace:none; | |
font-size:13.0pt; | |
font-family:"Verdana"; | |
color:#A20018; | |
font-weight:bold;} | |
p.NB-Interttulo21 {line-height:12.0pt; | |
page-break-after:avoid; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:#D0780A; | |
font-weight:bold;} | |
p.NB-Notadica1 {text-align:left; | |
line-height:13.0pt; | |
tab-stops:14.15pt; | |
text-autospace:none; | |
font-size:10.0pt; | |
font-family:"Verdana"; | |
color:#D0780A; | |
letter-spacing:.05pt;} | |
p.Noparagraphstyle1 {line-height:120%; | |
text-autospace:none; | |
font-size:12.0pt; | |
font-family:Times; | |
color:black;} | |
span.NB-NegritoTcnico1 {font-family:"Verdana"; | |
color:black; | |
letter-spacing:.05pt; | |
font-weight:bold; | |
vertical-align:baseline;} | |
p.NB-Corpo22 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:-.05pt;} | |
p.NB-Corpo221 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:-.05pt;} | |
p.NB-Corpo222 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:-.05pt;} | |
p.NB-Corpo223 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:-.05pt;} | |
p.NB-Corpo224 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:-.05pt;} | |
p.NB-Corpo225 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:-.05pt;} | |
p.NB-Corpo226 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:-.05pt;} | |
p.NB-Corpo227 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:-.05pt;} | |
p.NB-Corpo228 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:-.05pt;} | |
p.NB-Corpo229 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:-.05pt;} | |
p.NB-Corpo2251 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black; | |
letter-spacing:-.05pt;} | |
p.NB-Corpo1111 {text-align:left; | |
text-indent:5.65pt; | |
line-height:16.0pt; | |
text-autospace:none; | |
font-size:9.0pt; | |
font-family:"Verdana"; | |
color:black;} | |
.NB-Listagenstitulos {font-family: Verdana, Arial, Helvetica, sans-serif; | |
color: #FFFFFF; | |
font-size: 14px;} | |
.style4 {font-size: 11px; font-weight: bold; color: #BC001C;} | |
--> | |
</style> | |
</head> | |
<body bgcolor="#FFFFFF" lang=PT-BR> | |
<table width="770" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td><img src="/images_www/magazine/matisse/top_matisse.jpg" alt="Title" width="770" height="200"></td> | |
</tr> | |
<tr> | |
<td height="82"><p class="NB-Corpo1"><strong>Beans Binding, Swing Application Framework, and features you've probably been <br> | |
dreaming about having in your IDE</strong></p></td> | |
</tr> | |
<tr> | |
<td><div class=Section1> | |
<p class=NB-Corpo1><span lang=EN-US>One of the most | |
talked about and innovative features since NetBeans 5.0 is Project Matisse or | |
the Form Editor. Many would agree that Matisse is the best user interface | |
designer across different IDE categories and technologies. A good number of | |
developers will start or have started using NetBeans because of it. </span></p> | |
<p class=NB-Corpo1><span lang=EN-US>With software, there is never-ending room | |
for improvement and growth. In NetBeans 6.0, familiar and new developers will | |
find many new Matisse features to help improve Swing application development, | |
as you’ll see in this article.</span><br> | |
</p> | |
<p class=NB-Interttulo1><span lang=EN-US>Beans Binding and the Swing Application | |
Framework</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Building on the recent JCP specs Beans | |
Binding (JSR 295) and Swing Application Framework (JSR 296), desktop developers | |
have a few new cards up their sleeve; they’ll also benefit from more efficient | |
development. Plain Swing application developers gain more from the Swing | |
Application Framework enhancements in NetBeans, but Platform developers should | |
not feel left out. The latter already have a Swing-based application framework | |
in the NetBeans Platform, with many more features than JSR 296 provides. All | |
gain much with Beans Binding support, however.</span><br> | |
</p> | |
<p class=NB-Interttulo21><span lang=EN-US>Beans Binding support</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Beans Binding allows you to escape the | |
common monotony of writing code to copy data from user interface components to | |
data classes or JavaBeans and vice versa. With the new Beans Binding | |
enhancements, you can right click on a UI element and access the <i>Bind</i> context menu item. For instance, selecting this item for a </span><span | |
class=NB-NegritoTcnico1><span lang=EN-US style='font-size:10.0pt'>javax.swing.JTextField </span></span><span lang=EN-US>will show the preferred bound property of <i>text</i> (see <b>Figure 1</b>). Other properties can be accessed through the | |
property inspectors Binding tab (<b>Figure 2</b>).</span></p> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td><img src="/images_www/magazine/matisse/image/image001.png" width="343" height="177"></td> | |
</tr> | |
<tr> | |
<td><p class=NB-Corpo22><strong>Figure 1.</strong> The Beans Binding menu item.<br> | |
</p></td> | |
</tr> | |
</table> | |
<br> | |
<br> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td><img src="/images_www/magazine/matisse/image/image003.png" width="485" height="456"></td> | |
</tr> | |
<tr> | |
<td><p class=NB-Corpo221><strong>Figure 2.</strong> Setting Beans Binding options for a JTextField.<br> | |
<br> | |
</p></td> | |
</tr> | |
</table> | |
<br> | |
<p class=NB-Corpo1><span lang=EN-US>Once you’ve chosen the property to bind, a | |
dialog is displayed, where you can select the target JavaBean. You can then | |
enter an expression using the Beans Binding Expression Language. The syntax is | |
much like the JSP EL. Aside from entering the expression by hand, a nifty | |
selector, accessed as a drop-down list or combo box, allows developers to | |
quickly build the expression by drilling down through properties and | |
sub-properties.</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>When the application is run, the selected UI | |
component updates its bound component when focus is lost or the user presses | |
Enter. The main point is that the developer no longer has to manage this and | |
other operations with a load of event handling code.</span><br> | |
</p> | |
<p class=NB-Interttulo21><span lang=EN-US>Swing Application Framework support</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>The Swing Application Framework provides | |
mechanisms to quickly build complete desktop applications. NetBeans 6 takes it | |
further with integrated support for the framework in the IDE, while providing a | |
set of standard icons such as Copy, Paste, and Cut. This is better than piece | |
milling an application from Swing components, and coming up every time with a | |
separate solution for starting an application or shutting it down, basic | |
actions or events, custom icons, a resource manager, session storage, etc. </span></p> | |
<p class=NB-Corpo1><span lang=EN-US>To create a Swing Application Framework | |
project in NetBeans 6, select <i>File|New Project</i> and, under the General | |
category, choose the new Java Desktop Application project template. At the time | |
of writing, there are two application templates available: Basic and Database | |
(see <b>Figure 3</b>). Others will be included in future releases. For | |
example, thought is being given to templates for creating web client | |
applications based on the Swing Application Framework.</span><br> | |
</p> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td><img src="/images_www/magazine/matisse/image/image005.png" width="729" height="503"></td> | |
</tr> | |
<tr> | |
<td><p class=NB-Corpo222><strong>Figure 3.</strong> Choosing a desktop application template. <br> | |
</p></td> | |
</tr> | |
</table> | |
<p class=NB-Corpo1><span lang=EN-US>The Basic template generates a regular Swing | |
application with simple features such as Cut, Copy, Paste, Save, and New. | |
Simple applications like Notepad or KWrite can be easily created with this | |
template (see <b>Figure 4</b>). </span></p> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td><img src="/images_www/magazine/matisse/image/image007.png" width="414" height="381"></td> | |
</tr> | |
<tr> | |
<td><p class=NB-Corpo223><strong>Figure 4.</strong> Example application generated with the Basic template.<br> | |
<br> | |
</p></td> | |
</tr> | |
</table> | |
<p class=NB-Corpo1><span lang=EN-US>The Database template allows users to create | |
CRUD database applications. Along with Apache Derby/JavaDB or HSQLDB, this can | |
be like Microsoft Access on steroids. </span></p> | |
<p class=NB-Corpo1><span lang=EN-US style='letter-spacing:-.1pt'>To me, the | |
Swing Application Framework support works best for developing simpler | |
applications. This may get better in the future with JSR 277 (Java Module | |
System). However, a module system alone does not provide a framework with all | |
the components and utilities offered by the NetBeans Platform. For more complex | |
applications, I advise you to build on the NetBeans Platform. A path from Swing | |
Application Framework-based applications to Platform-based apps is being | |
pondered, but nothing is concrete in this regard at the time of writing. </span></p> | |
<p class=NB-Notadica1><span lang=EN-US><strong>Note: </strong>The Swing Application Framework and the | |
NetBeans Platform are both Swing frameworks. The Swing Application Framework | |
provides application lifecycle management, session management (e.g. windows are | |
stored in the same locations when the application restarts), a resource | |
manager, actions, storage, an application context, and synchronous and | |
asynchronous tasks. The NetBeans Platform provides all these plus numerous | |
other features, including a powerful module/plug-in system which allows modules | |
to install their own UI menus, actions, and services, among other application | |
items.</span></p> | |
<p class=NB-Interttulo1><span lang=EN-US>More new features</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Additional new features in NetBeans 6 | |
include a new visual menu designer, protected code customizer enhancements, | |
centering of components and improved Free Design preferred-gaps and copy-paste | |
support. </span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Other features added to version 6 have been | |
made available for NetBeans 5.5 developers as an update. These include | |
automatic internationalization, visual localization, a preview with look and | |
feel support, relative font definitions, and dragging of components from the | |
projects explorer to the UI – as well as a context-sensitive help bar, and a | |
pre/post declaration code editor. In the upcoming IDE release, all these | |
features will be fully integrated, and come out of the box.</span></p> | |
<p class=NB-Interttulo21><span lang=EN-US>Visual Menu Designer</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Previous versions of Matisse had limited | |
application menu design support; you needed to use the Inspector window to | |
create menu items and sub-menus. Now menu components can be selected and edited | |
visually in the UI designer. This helps in a couple Java Desktop Application | |
ways: it’s clearer which menu and menu item is being edited, and the form | |
doesn’t have to be previewed or the application run to see what the menu will | |
look like at runtime. See the Visual Menu Designer in action in <b>Figure 5</b>. </span></p> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td><img src="/images_www/magazine/matisse/image/image009.png" width="280" height="254"></td> | |
</tr> | |
<tr> | |
<td><p class=NB-Corpo224><strong>Figure 5.</strong> New Visual Menu Designer.<br> | |
</p></td> | |
</tr> | |
</table> | |
<p class=NB-Interttulo21><span lang=EN-US>Protected Code Customizer Enhancements</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>NetBeans uses the concept of protected code. | |
This is used by Matisse so that the generated code is not changed and possibly | |
broken by the developer, allowing the visual designer to continue working. | |
Sometimes, though, this is a little too strict, and restrictions on protected | |
code are a common complaint in the NetBeans mailing lists. </span></p> | |
<p class=NB-Corpo1><span lang=EN-US>In NetBeans 6 this will be much better, and | |
you’ll be able to change the protected code sections in many ways. These help | |
you get around issues of timing actions and method calls, with initialization | |
and property/bean configuration, for example. </span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Here are some options for modifying | |
protected code, all accessible through the Properties window Code tab (also see <b>Figure 6</b>):<b> </b></span></p> | |
<p class=NB-Corpo1><span lang=EN-US style='font-family:Wingdings;'>§ </span><i><span lang=EN-US>Post-Listener-Code</span></i><span | |
lang=EN-US> – Included after all properties of all beans are set and all | |
listeners are added. </span></p> | |
<p class=NB-Corpo1><span lang=EN-US style='font-family:Wingdings;'>§ </span><i><span lang=EN-US>Pre-Adding Code and Post-Adding Code</span></i><span | |
lang=EN-US> – Included before and after the component is added to the parent | |
container such as a </span><span class=NB-NegritoTcnico1><span lang=EN-US | |
style='font-size:10.0pt'>JPanel</span></span><span lang=EN-US> or </span><span | |
class=NB-NegritoTcnico1><span lang=EN-US style='font-size:10.0pt'>JFrame</span></span><span | |
lang=EN-US>. </span></p> | |
<p class=NB-Corpo1><span lang=EN-US style='font-family:Wingdings;letter-spacing:0pt'>§ </span><i><span lang=EN-US style='letter-spacing: | |
0pt'>A</span><span lang=EN-US>fter-All-Set Code </span></i><span lang=EN-US>– I</span><span | |
lang=EN-US style='letter-spacing:0pt'>ncluded after the component is completely | |
set-up. </span></p> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td><img src="/images_www/magazine/matisse/image/image011.png" width="348" height="351"></td> | |
</tr> | |
<tr> | |
<td><p class=NB-Corpo2251><strong>Figure 6.</strong> Protected Code Customizer enhancements. </p></td> | |
</tr> | |
</table> | |
<p class=NB-Corpo1><span lang=EN-US>The new Pre/Post Declaration Code Editor is more | |
of a must-have than a development boost. As of Java 5, developers can now | |
annotate different things in Java source code, and for libraries or | |
technologies requiring annotations, Matisse must allow the developer to somehow | |
set these annotations. Annotations can also be added through the Properties | |
window's Code tab, in the Pre-Declaration Code field; and there’s a | |
Post-Declaration Code field available. </span></p> | |
<p class=NB-Corpo1><span lang=EN-US>NetBeans 6 comes with a new code customizer, | |
which lets you inject source code more easily into the protected sections. It’s | |
accessible by right clicking on the UI form in the designer and selecting <i>Customize | |
Code</i>. A dialog with a Java editor pops up. See <b>Figure 7</b> for an | |
example.</span></p> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td><img src="/images_www/magazine/matisse/image/image013.png" width="680" height="617"></td> | |
</tr> | |
<tr> | |
<td><p class=NB-Corpo225><strong>Figure 7.</strong> Code Customizer Dialog<br> | |
<br> | |
</p></td> | |
</tr> | |
</table> | |
<p class=NB-Interttulo21><span lang=EN-US><br> | |
Centering of components</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Aligning components along a center axis just | |
got easier. Matisse now allows a group of selected components to be centered | |
down the axis of the first selected component. Horizontal and vertical | |
centering are available. Currently, more than one component must be selected; | |
then all are centered on the widest selection. Another option will allow | |
centering components horizontally and vertically in their parent container.</span><br> | |
</p> | |
<p class=NB-Interttulo21><span lang=EN-US>More gaps </span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Before NetBeans 6, the Free Design layout | |
manager supported a single preferred gap for component placement. In 6.0, three | |
preferred gaps are supported. A preferred gap is the preferred spacing between | |
components, and is available on all sides of a component for quick and elegant | |
placement, as shown in <b>Figure 8</b>. For developers who may like more | |
control over spacing between components, having three choices comes in handy.</span><br> | |
</p> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td><img src="/images_www/magazine/matisse/image/image015.png" width="350" height="83"></td> | |
</tr> | |
<tr> | |
<td><p class=NB-Corpo226><strong>Figure 8.</strong> Free Design | |
preferred gap support – three offsets instead of one<br> | |
<br> | |
</p></td> | |
</tr> | |
</table> | |
<p class=NB-Interttulo21><span lang=EN-US>Better copy/paste support</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>While using the Free Design layout, copying | |
and pasting produces a horrible result in versions before 6.0. It places all | |
copied components, no matter the number selected, at location [0,0] on the UI | |
form. This problem has now been solved. Instead of messing up the layout, | |
copies are now pasted to a manageable offset of the original components. The | |
components also keep their layout after copying (see <b>Figure 9</b>).</span><br> | |
</p> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td><img src="/images_www/magazine/matisse/image/image015.png" width="350" height="83"></td> | |
</tr> | |
<tr> | |
<td><p class=NB-Corpo227><strong>Figure 9.</strong> Improved copy/paste support in Free Design (components were pasted multiple times).<br> | |
<br> | |
</p></td> | |
</tr> | |
</table> | |
<p class=NB-Interttulo21><span lang=EN-US>Automatic Internationalization and Visual | |
Localization</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Previous releases of NetBeans required a few | |
extra steps to internationalize and localize a UI. Now the process is | |
streamlined. In previous versions, you had to setup each individual UI element | |
to pull values from the correct resource bundle. Then to actually localize the | |
bundle you needed to create separate bundle files or localized entries | |
manually, enter the text for the correct locale, and format the file | |
accordingly (using a different encoding, for example).</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>In NetBeans 6.0, you can now ask Matisse to | |
automatically internationalize the application during UI design. This means | |
that for each resource that would normally be internationalized by hand Matisse | |
automatically adds the value supplied in the UI designer to a resource bundle. | |
This is done for all UI elements.</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>The visual localization feature works in | |
harmony with automatic internationalization. You can right click the top form | |
node in the tree of the Inspector window, locate the Design Locale combo box in | |
the Properties window, and then select a locale or add a new one. </span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Once the Design Locale is selected, you can | |
simply edit the text in the UI as if normally editing a form. The localization | |
for the Design Locale takes place automatically with the values entered into | |
the UI. The locale can be changed and the form re-edited to set the values for | |
the newly selected locale. It is as simple as it sounds to create a fully | |
internationalized UI with NetBeans 6 (see <b>Figure 10</b>).</span><br> | |
<br> | |
</p> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td><img src="/images_www/magazine/matisse/image/image019.png" width="353" height="278"></td> | |
</tr> | |
<tr> | |
<td><p class=NB-Corpo228><strong>Figure 10.</strong> Access the Automatic Resource Management combo box to set the resource management style to Internationalization, and Design Locale to set the locale used while editing the UI in Matisse. Change the locale and re-edit the UI to localize the user interface. Nice and easy! <br> | |
</p></td> | |
</tr> | |
</table> | |
<br> | |
<br> | |
<p class=NB-Interttulo21><span lang=EN-US>Preview with look and feel support</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Before NetBeans 6.0, there was no mechanism | |
to allow the project’s look and feel to be set in the designer for a regular | |
Swing application. It was left to the developer to add the appropriate code to | |
set the application look and feel.</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Setting the look and feel of a regular Swing | |
application with source code is quite simple. However, without the Form <br> | |
Editor allowing the design look and feel to be set, the developer has no way to | |
see how the application will look at runtime with different look and feels. | |
This will no longer be a problem.</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>In NetBeans 6.0, forms can be previewed with | |
any available look and feel. In the Inspector window, the developer right | |
clicks on the form containers node, or on the node on the same level as the | |
Other Components node and just below it (its sibling), which has the name of | |
the forms extended class such as </span><span class=NB-NegritoTcnico1><span | |
lang=EN-US style='font-size:10.0pt'>JFrame</span></span><span lang=EN-US>, </span><span | |
class=NB-NegritoTcnico1><span lang=EN-US style='font-size:10.0pt'>JDialog</span></span><span | |
lang=EN-US>, or </span><span class=NB-NegritoTcnico1><span lang=EN-US | |
style='font-size:10.0pt'>JPanel</span></span><span lang=EN-US>. Then the | |
Preview Design sub-menu is rolled over and the look and feel is selected. The | |
form is then previewed with the chosen look and feel. </span></p> | |
<p class=NB-Notadica1><span lang=EN-US>A right-click on the form in the UI | |
designer also makes the Preview Design sub-menu accessible.</span><br> | |
</p> | |
<p class=NB-Interttulo21><span lang=EN-US>Relative font definitions</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Have you ever wanted to define your UI fonts | |
just a little larger or smaller than the overall system or application font? | |
This would come in handy in that fonts would not have to be set for each | |
component. Instead, fonts for specific components could be set to a different | |
relative size, or have a different style than the main application or system | |
font.</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>In the latest version of Matisse this is | |
quick and simple. You select a UI component on a form, and in the Properties | |
window click the button to the right of the </span><span | |
class=NB-NegritoTcnico1><span lang=EN-US style='font-size:10.0pt'>font</span></span><span | |
lang=EN-US> property. The font editor appears. There, you can select the | |
checkbox “Derive the font from the default font” and choose the font style. The | |
font can be sized relative to the default font; the size can also be made | |
absolute. Regardless of the size, the font is not hard-coded and will be determined | |
at runtime. This feature uses the </span><span class=NB-NegritoTcnico1><span | |
lang=EN-US style='font-size:10.0pt'>Font.deriveFont()</span></span><span | |
lang=EN-US> method.</span><br> | |
</p> | |
<p class=NB-Interttulo21><span lang=EN-US>Dragging components from Project | |
Explorer to the UI</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>In previous versions of NetBeans, the | |
developer had to install UI components from developing projects into the Form | |
Editor’s Palette to use them in UI forms. This created different issues with | |
modifications to the components, and complicated using components from | |
sub-projects in project UIs. Things have gotten better, however.</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Now you can work on a library as a | |
sub-project or dependency. You create a new form in the parent project, and the | |
sub-project UI controls/classes can then be dragged from the project hierarchy | |
and dropped onto a form without adding them to the palette or the global IDE. | |
This is essentially | |
project-level palette items: a nicer and cleaner solution.</span><br> | |
</p> | |
<p class=NB-Interttulo21><span lang=EN-US>Context-sensitive Help Bar</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Who says you can’t teach an old dog new | |
tricks? The new context-sensitive help bar (see <b>Figure 11</b>) can help | |
new and familiar developers alike. New users will probably find it more useful, | |
as it can quickly bring them up to speed with the Matisse features. The new | |
help bar provides contextual hints about what can be done with the selected | |
component or current feature being used. Even seasoned users may find new | |
shortcuts or features they did not know existed.</span><br> | |
<br> | |
</p> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td><img src="/images_www/magazine/matisse/image/image021.png" width="549" height="218"></td> | |
</tr> | |
<tr> | |
<td><p class=NB-Corpo229><strong>Figure 11.</strong> Context-sensitive help bar<br> | |
</p></td> | |
</tr> | |
</table> | |
<p class=NB-Interttulo1><span lang=EN-US>Conclusions</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>Matisse is part of the reason for the | |
NetBeans community’s recent growth spurt, and it gets better and better with | |
each release. The 6.0 release is no different, and the latest features are a | |
great boost to Swing application development efficiency. Everyone should try | |
it.</span></p> | |
<p class=NB-Corpo1><span lang=EN-US>NetBeans 6.0 Matisse feature development is | |
ongoing, and other features are currently in the works. Most notably, the | |
possibility to fix refactorings for generated UI code should be ready in the | |
final version, along with many other new features and | |
improvements. </span> <span | |
style='letter-spacing:.15pt;'> </span><br> | |
</p> | |
<table width="100%" border="1" cellpadding="0" cellspacing="0" bordercolor="#BC001C"> | |
<tr> | |
<td height="24" valign="middle" bgcolor="#BC001C"><p class="NB-Listagenstitulos"><strong>Links</strong></p></td> | |
</tr> | |
<tr> | |
<td><br> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td width="40"> </td> | |
<td><a href="https://netbeans.org/projects/guibuilder"><span class="style4"><font face="Verdana">NetBeans GUI Builder</font></span></a></td> | |
</tr> | |
<tr> | |
<td> </td> | |
<td><font size=1 color=black face="Verdana"><span style="font-size:9.0pt;letter-spacing:0pt">"Matisse" GUI Builder project home page.</span></font></td> | |
</tr> | |
</table> | |
<br> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td width="40"> </td> | |
<td><a href="http://wiki.netbeans.org/wiki/view/NetBeansDreamTeam"><span class="style4"><font face="Verdana">wiki.netbeans.org/wiki/view/NetBeansDreamTeam </font></span></a></td> | |
</tr> | |
<tr> | |
<td> </td> | |
<td><font size=1 color=black face="Verdana"><span style="font-size:9.0pt;letter-spacing:0pt">NetBeans Dream Team Wiki/home page | |
.</span></font></td> | |
</tr> | |
</table> | |
<br> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td> </td> | |
<td><a href="http://blogs.sun.com/roumen/entry/swing_application_framework_swing_databinding"><span class="style4"><font face="Verdana"> blogs.sun.com/roumen/entry/swing_application_framework_databinding </font></span></a></td> | |
</tr> | |
<tr> | |
<td> </td> | |
<td><font size=1 color=black face="Verdana"><span style="font-size:9.0pt;letter-spacing:0pt">Swing Application Framework and Beans Binding demo by Roman Strobl</span></font><font color=black face="Verdana"><span style="font-size:9.0pt;letter-spacing:0pt">.</span></font></td> | |
</tr> | |
</table> | |
<br> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td width="40"> </td> | |
<td><a href="http://wadechandler.blogspot.com/"><span class="style4"><font face="Verdana">http://wadechandler.blogspot.com/</font></span></a></td> | |
</tr> | |
<tr> | |
<td> </td> | |
<td><font size=1 color=black face="Verdana"><span style="font-size:9.0pt;letter-spacing:0pt">Wade Chandler’s home page</span></font><font color=black face="Verdana"><span style="font-size:9.0pt;letter-spacing:0pt">.</span></font></td> | |
</tr> | |
</table> | |
<br> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td width="40"> </td> | |
<td><a href="http://appframework.dev.java.net"><span class="style4"><font face="Verdana">appframework.dev.java.net </font></span></a></td> | |
</tr> | |
<tr> | |
<td> </td> | |
<td><font color=black face="Verdana"><span style="font-size:9.0pt;letter-spacing:0pt">A JSR 296 Swing Application Framework implementatio, </span></font></td> | |
</tr> | |
</table> | |
<br> | |
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |
<tr> | |
<td width="40"> </td> | |
<td><a href="https://netbeans.org/projects/guibuilder/updates/update55.html"><span class="style4"><font face="Verdana">form.netbeans.org/updates/update55.html </font></span></a></td> | |
</tr> | |
<tr> | |
<td> </td> | |
<td><font color=black face="Verdana"><span style="font-size:9.0pt;letter-spacing:0pt">NetBeans 5.5 Matisse update feature page. </span></font></td> | |
</tr> | |
</table></td> | |
</tr> | |
</table> | |
<table width="770" border="1" cellpadding="0" cellspacing="0" bordercolor="#BC001C"> | |
<tr> | |
<td><table width="100%" border="0" cellpadding="0" cellspacing="1" bordercolor="#BC001C"> | |
<tr> | |
<td width="93"><div align="center"><img src="/images_www/magazine/autores/Wade.jpg" alt="Autor" width="77" height="94"></div></td> | |
<td width="677" valign="middle"><p class=NB-Corpo1111> <strong>Wade Chandler</strong> <br> | |
(<em>hwadechandler-nb@yahoo.com</em>) is a software engineer working for Decision Dynamics, Inc. and an independent software developer. He began his career in 1997 and has been involved with the NetBeans community since it was known as Forte for Java, and with Java since JDK 1.0. Wade contributes to the NetBeans project, and is a member of the NetBeans <br> | |
Dream Team.</p></td> | |
</tr> | |
</table></td> | |
</tr> | |
</table> | |
</div></td> | |
</tr> | |
</table> | |
</body> | |
</html> |