<questionid="arch-what"> Whatisthisprojectgoodfor? <hint> Pleaseprovideherefewlinesdescribingthetheproject, whatproblemitshouldsolve,providelinkstodocumentation, specifications,etc. </hint> </question>
-->
<answer id="arch-what">
The form module (Form Editor) lets developers visually create forms with AWT,
Swing, and JavaBeans support. See <a href="http://form.netbeans.org/">form.netbeans.org</a>
for more information.<p>List of the main features:</p>
<ul>
<li>Support for design of visual and non-visual forms.</li>
<li>WYSIWYG designer with "Test Form" and "Zoom Design
View" features.</li>
<li>Support for Accessibility.</li>
<li>Undo/redo capability for all operations.</li>
<li>Extensible Component Palette with pre-installed Swing and AWT components.</li>
<li>Component Inspector showing a components tree and properties.</li>
<li>Automatic one-way code generation, fully customizable.</li>
<li>Support for all AWT/Swing layout managers, including drag&drop operations.</li>
<li>GridBagLayout visual customizer.</li>
<li>Support for null layout.</li>
<li>In-place editing of text labels of components (labels, buttons, textfields,
etc) in the designer.</li>
<li>Full JavaBeans support -- installing, using and customizing beans; support
for using bean properties,
property editors, custom property editors, events and event handlers, bean
customizers, etc.</li>
<li>Visual beans customization -- ability to create a form from any JavaBean class.</li>
<li>Connection Wizard for generating "connection" code for beans.</li>
</ul>
</answer>
<!-- <questionid="arch-overall"when="init"> Describetheoverallarchitecture. <hint> WhatwillbeAPIfor <ahref="http://openide.netbeans.org/tutorial/api-design.html#design.apiandspi"shape="rect"> clientsandwhatsupportAPI</a>? Whatpartswillbepluggable? Howwillplug-insberegistered?Pleaseuse<code><apitype="export"/></code> todescribeyourgeneralAPIs. Ifpossiblepleaseprovide simplediagrams. </hint> </question>
-->
<answer id="arch-overall">
There are five main architecture blocks: form model and metadata, form designer,
code generator, persistence manager, and layout design support. None of these part
is pluggable. There is no public API for extensions by 3rd parties.
</answer>
<questionid="compat-standards"> Doesthemoduleimplementsordefinesanystandards?Isthe implementationexactoritdeviatessomehow? </question>
-->
<answer id="compat-standards">
None defined or implemented. Follows JavaBeans standard for components
used in designed forms.
</answer>
<!-- Question: compat-version
<questionid="compat-version"> Doesyourmoduleproperlycoexistswithearlierandfuture versions?Canyoucorrectlyreadsettings?Willfuture versionsbeabletoreadsettings? <hint> Veryhelpfulforreadingsettingsistostoreversionnumber there,sofutureversionscandecidewhetherhowtoread/convert thesettingsandolderversionscanignorethenewones. </hint> </question>
-->
<answer id="compat-version">
Only one version of the module can be installed at a time.
The settings are shared across different versions, stored
and read by Java serialization and will be read in future as well.
</answer>
<!-- Question: dep-jre
<questionid="dep-jre"> WhichversionofJREyouneed(1.2,1.3,1.4,etc.)? <hint> Itisexpectedthatifyourmodulerunson1.xthatitwillrun on1.x+1ifno,statethatplease.Alsodescribeherecaseswhere yourundifferentcodeondifferentversionsofJREandwhy. </hint> </question>
-->
<answer id="dep-jre">
Runs on 1.4.x and 1.5.x.
</answer>
<!-- Question: dep-jrejdk
<questionid="dep-jrejdk"> DoyourequireJDKorisJREenough? </question>
-->
<answer id="dep-jrejdk">
Need JDK (dt.jar file for Swing beaninfos).
</answer>
<questionid="dep-platform"> Onwhichplatformsyourmodulerun?Any?Doesitruninthesame way? <hint> IfyourmoduleisusingJNIordealswithspecialdifferencesof OSeslikefilesystems,etc.pleasedescribeherewhattheyare. </hint> </question>
-->
<answer id="dep-platform">
The module is 100% pure Java and runs on any platform.
</answer>
<!-- Question: deploy-jar
<questionid="deploy-jar"> DoyoudeployjustmoduleJARfile(s)orsomeotherfiles? <hint> IfyourmoduleconsistjustfromonemoduleJARfile,justconfirmthat. IfitusesmorethanoneJAR,describewheretherearelocated,how theyrefertoeachother. IfitconsistofmoduleJAR(s)andotherfiles,pleasedescribe whatistheirpurpose,whyotherfilesarenecessary.Please makesurethatinstallation/deinstallationleavesthesystem instateasitwasbeforeinstallation. </hint> </question>
-->
<answer id="deploy-jar">
<ul>
<li>org-netbeans-modules-form.jar - standard module jar file</li>
<li>AbsoluteLayout.jar - library containing AbsoluteLayout classes
(custom layout manager)</li>
<li>swing-layout.jar - library with layout extension classes (bundled binary
build of java.net project https://swing-layout.dev.java.net/)</li>
</ul>
The library jars are placed in modules/ext, added automatically to user projects
when used, need to be distributed with the created application.
</answer>
<questionid="deploy-packages"> Arepackagesofyourmodulemadeinaccessiblebynotdeclaringthem public? <hint> NetBeansmodulesystemallowsrestrictionofaccessrightsto publicclassesofyourmodulefromothermodules.Thisprevents unwanteddependenciesofothersonyourcodeandshouldbeused wheneverpossible(<ahref="http://www.netbeans.org/download/apis/org/openide/doc-files/upgrade.html#3.4-public-packages"> publicpackages </a>). </hint> </question>
-->
<answer id="deploy-packages">
All public packages are accessible, no restriction applied.
</answer>
<!-- Question: deploy-shared
<questionid="deploy-shared"> Doyouneedtobeinstalledinsharedlocationoronlyinuserdirectory? <hint> Installationlocationshallnotmatter,ifitdoesexplainwhy. </hint> </question>
-->
<answer id="deploy-shared">
Module can be installed anywhere.
</answer>
<!-- Question: exec-classloader
<questionid="exec-classloader"> Doesyourcodeusesownclassloader? <hint> Abitunusual.Pleaseexplainwhyandwhatfor. </hint> </question>
-->
<answer id="exec-classloader">
Special classloader is used to load classes of user components in the form.
<code>FormClassLoader</code> loads the classes either:
<ul>
<li>from user project classpath the form belongs to (default),</li>
<li>from the system classloader (module),</li>
<li>from both (allowing component class loaded from module to access resources
in user project).</li>
</ul>
<p>For loading from the user project classpath, special classloader is used
<code>(ProjectClassLoader)</code> which uses execution classpath of the project
to load classes, but the source classpath for resources (preferentially)
so it is possible to access resources without the need to compile/build the project first.</p>
<p>For loading a class using the second or third style, the class name must
be registered via layer as described in <a href="#layer-ClassLoadingTypes">ClassLoadingTypes</a>.</p>
</answer>
<questionid="exec-introspection"> Doesyourmoduleuseanykindofruntimetypeinformations(instanceof, workwithjava.lang.Class,etc.)? <hint> CheckforcaseswhenyouhaveanobjectoftypeAandyoualso expectitto(possibly)beoftypeBanddosomespecialaction.That shouldbedocumented.Thesameappliesonoperationsinmeta-level (Class.isInstance(...),Class.isAssignableFrom(...),etc.). </hint> </question>
-->
<answer id="exec-introspection">
Form editor uses runtime introspection heavily. It is mainly required by the fact
that form editor manages complex meta data structures (representing components) that
must be presented via limited JavaBeans infrastructure and properties support in the IDE.
The cases when an object is tested on various types are quite common, but not documented.
</answer>
<questionid="exec-property"> Isexecutionofyourcodeinfluencedbyanyenvironmentof system(<code>System.getProperty</code>)property? <hint> Ifthereisapropertythatcanchangethebehaviourofyour code,somebodywilllikelyuseit.Youshoulddescribewhatitdoes andthestabilitycategoryofthisAPI.Youmayuse <PRE> <propertyname="id"category="private"> descriptionoftheproperty,whereitisused,whatitinfluence,etc. </property> </PRE> </hint> </question>
-->
<answer id="exec-property">
<api type="export" group="systemproperty" name="netbeans.form.no_undo" category="private">
Set to true, turns off the undo/redo capability. For debugging purposes only.
</api>
<api type="export" group="systemproperty" name="netbeans.form.use_idelaf" category="private">
Set to true, turns off the strict usage of standard Look And Feel defaults
(so then the same LAF settings as in the IDE are used for designed forms).
Can be useful when designing forms to be used in the IDE. Also for
debugging purposes.
</api>
</answer>
<!-- Question: exec-reflection
<questionid="exec-reflection"> Doesyourcodeusesjava.lang.reflecttoexecutesomeothercode? <hint> ThisusuallyindicatesamissingorunsufficientAPIintheother partofthesystem.Iftheothersideisnotawareofyourdependency thiscontractcanbeeasilybroken. </hint> </question>
-->
<answer id="exec-reflection">
Reflection is used for:
<ul>
<li>accessing <api name="java.awt.peer" group="java"type="import" category="private"/> private API - for setting own "fake" peers
of designed heavyweight components (to avoid using native component peers in the IDE)</li>
<li>obtaining information about beans' properties, events, methods etc.</li>
<li>creation of instances of beans; reading/writing of beans' properties</li>
<li>mapping between key chars (e.g. 'a') and key codes (<code>KeyEvent.VK_A</code>). See <code>KeyStrokeEditor</code>.</li>
<li>implementation of scrollable popup menu. See <code>PaletteMenuView</code> and <code>ScrollPopupMenu</code>.</li>
</ul>
</answer>
<!-- Question: format-clipboard
<questionid="format-clipboard"> Whichprotocolsyourcodereads/insertswhencommunicatingwith clipboard? </question>
-->
<answer id="format-clipboard">
<ul>
<li>custom DataFlavor type referencing own structures (for copy/cut/paste)</li>
<li>
<api name="InstanceCookie-paste" group="java"type="export" category="private">
standard Open API's NodeTransfer.cookie for InstanceCookie (just for pasting)
</api>
</li>
</ul>
</answer>
<questionid="format-types"> Whichfileformatsyourcodereadsorwritesondisk? </question>
-->
<answer id="format-types">
Form GUI data files are stored in .form files of custom XML format
(DTD in /cvs/form/src/org/netbeans/modules/form/resources/forms.dtd).
There is a version number stored in the .form file allowing to extend
the format, keeping backward compatibility and avoiding data corruption.
Form Editor is able to read current and older format versions, refuses
to read newer versions.
</answer>
<!-- Question: lookup-lookup
<questionid="lookup-lookup"> Doesyourmoduleuses<code>org.openide.util.Lookup</code> tofindanycomponentstocommunicateto?Whichones? <hint> Pleasedescribetheinterfacesyouaresearchingfor,where aredefined,whetheryouaresearchingforjustoneormoreofthem, iftheorderisimportant,etc.Alsoclasifythestabilityofsuch APIcontract. </hint> </question>
-->
<answer id="lookup-lookup">
Lookup.getDefault().lookup(java.awt.datatransfer.Clipboard.class) - to get
standard Clipboard instance
</answer>
<questionid="perf-huge_dialogs"> Doesyourmodulecontainanydialogsorwizardswithhuge amountofGUIcontrolslikecomboboxes,lists,trees,text areas? </question>
-->
<answer id="perf-huge_dialogs">
The dialog showing custom property editors for given component property can be quite
huge (depends on property type and available customizers for it). Most of these
dialogs are not defined in Form Editor; as for the Form Editor itself, it has no
huge or time-expensive dialogs requiring some optimization on initialization.
</answer>
<!-- Question: perf-limit
<questionid="perf-limit"> Arethereanylimitsinnumber/sizeofelementsyourcode canhandle? </question>
-->
<answer id="perf-limit">
No explicit limits. Technically, the available memory size is the limit...
</answer>
<!-- Question: perf-mem
<questionid="perf-mem"> Whatistheamountofmemoryyourcomponentoccupies?Estimate witharelactiontothenumberofwindows,etc. </question>
-->
<answer id="perf-mem">
Rough numbers:
<ul>
<li>form editor without forms: 1MB</li>
<li>one opened form without components: 500KB</li>
<li>one component in the form: 50KB</li>
</ul>
</answer>
<!-- Question: perf-menus
<questionid="perf-menus"> Doesyourmoduleusedynamicallychangingcontextmenusor contextsensitiveactionswithcomplicatedlogicforenable/disable? </question>
-->
<answer id="perf-menus">
No. Context menu are rather stable once created. Enabling logic is simple.
</answer>
<!-- Question: perf-progress
<questionid="perf-progress"> Doesyourmoduleexecutessomelongrunningtask? <hint>Typicallytheyaretaskslikeconnectingover network,computinghugeamountofdata,compilation. Suchcommunicationshouldbedoneasynchronously(forexample using<code>RequestProcessor</code>),definitivelyitshould notblockAWTthread. </hint> </question>
-->
<answer id="perf-progress">
Opening a form can be quite long task; done whole in AWT event queue
thread, making the IDE unresponsive all the time.
</answer>
<!-- Question: perf-scale
<questionid="perf-scale"> Whichexternalcriteriainfluencetheperformanceofyour program(sizeoffileineditor,numberoffilesinmenu, insourcedirectory,etc.)andhowwellyourcodescales? Pleaseincludesomeestimates. </question>
-->
<answer id="perf-scale">
Size of the .form data file and number of components influence
opening time and editing responsiveness. Roughly, 100 components add 5 sec to open time and 1 sec to edit/update time.
</answer>
<questionid="resources-file"> Doesyourmoduleuse<code>java.io.File</code>directly? <hint> NetBeansprovidealogicalwrapperoverplainfilescalled <code>org.openide.filesystems.FileObject</code>that providesuniformaccesstosuchresourcesandistheprefered waythatshouldbeused.Butofcoursetherecanbesituationswhen thisisnotsuitable. </hint> </question>
-->
<answer id="resources-file">
Yes, but only for external JAR files when installing beans from them.
</answer>
<!-- Question: resources-layer
<questionid="resources-layer"> Doesyourmoduleprovideownlayer?Doesitcreatesomefilesor foldersonit?Whatitistryingtocommunicatebythatandwithwhich component? <hint> NetBeansallowsautomaticanddeclarativeinstallationofresources bymodulelayers.Moduleregisterfilesintoappropriateplaces andothercomponentsusethatinformationtoperformtheirtask (buildmenu,toolbar,windowlayout,listoftemplates,setof options,etc.). </hint> </question>
-->
<answer id="resources-layer">
Yes, files are created for menus, actions, shortcuts, templates, window system layout,
settings storage, AbsoluteLayout.jar automount - these are all in standard Open
APIs. For its own purpose, form editor uses the layer to define:
<ul>
<li>content of component palette,</li>
<li>list of component classes that need to be loaded from IDE internally
(from module, i.e. not from user projects as by default).</li>
</ul>
</answer>
<questionid="resources-read"> Doesyourmodulereadanyresourcesfromlayers?Forwhatpurpose? <hint> Asthisissomekindofintermoduledependency,itisakindofAPI. Pleasedescribeitandclasifyaccordingto <ahref="http://openide.netbeans.org/tutorial/api-design.html#categories"> commonstabilitycategories</a>. </hint> </question>
-->
<answer id="resources-read">
<p><api name="Palette" group="layer"type="export" category="friend">
Content of the component palette is read from the layer. It is located in <code>FormDesignerPalette</code>
folder with one level of subfolders serving as categories, and <code>.palette_item</code> files
in the subfolders as items. The palette item file is a xml file defining the class, display name, icon, and origin of one component in the palette. See form module's layer
file for examples.
</api></p>
<p><api name="ClassLoadingTypes" group="layer"type="export" category="private">
Form editor loads component classes from user project classpath by default. If some
classes are provided by a module (like special BeanInfo or property editors)
they might need to be loaded by IDE system classloader instead. Such classes should be
registered in a file placed under <code>org-netbeans-modules-form/classloader/system</code>
folder (or <code>system_with_project</code> if the class needs to be able to
access resources also on the project classpath). The file should be a plain text file listing
the class names (or package patterns using usual * and ** notation), one name per line.
See form module's layer file and <code>SystemClasses.txt</code> file for examples.
</api></p>
</answer>
<!-- <questionid="arch-quality"when="init"> Howwillthe<ahref="http://www.netbeans.org/community/guidelines/q-evangelism.html"shape="rect">quality</a> ofyourcodebetestedand howarefutureregressionsgoingtobeprevented? <hint> Whatkindoftestingdo youwanttouse?Howmuchfunctionality,inwhichareas, shouldbecoveredbythetests? </hint> </question>
-->
<answer id="arch-quality">
There are unit tests for the layout design subsystem. There is also bunch of functional test written by QA.
</answer>
<!-- <questionid="arch-usecases"when="init"> Describethemain<ahref="http://openide.netbeans.org/tutorial/api-design.html#usecase"shape="rect"> usecases</a>ofthenewAPI.Whowilluseitunder whatcircumstances?Whatkindofcodewouldtypicallyneedtobewritten tousethemodule? </question>
-->
<answer id="arch-usecases">
E.g. i18n module provides a specialized property editor for String that allows to enter
an internationalized string taken from a .properties file.
<api type="export" group="java" name="org.netbeans.modules.form.FormPropertyEditorManager" category="private">
allows to register property editors for given types to be used only in form editor (not in
the whole IDE which is managed by the <code>java.beans.PropertyEditorManager</code>)
</api>
</answer>
<!-- <questionid="exec-threading"when="impl"> Whatthreadingmodels,ifany,doesyourmoduleadhereto? <hint> IfyourmodulecallsforeignAPIswhichhaveaspecificthreadingmodel, indicatehowyoucomplywiththerequirementsformultithreadedaccess (synchronization,mutexes,etc.)applicabletothoseAPIs. IfyourmoduledefinesanyAPIs,orhascomplexinternalstructures thatmightbeusedfrommultiplethreads,declarehowyouprotect dataagainstconcurrentaccess,raceconditions,deadlocks,etc., andwhethersuchrulesareenforcedbyruntimewarnings,errors,assertions,etc. Examples:aclassmightbenon-thread-safe(likeJavaCollections);might befullythread-safe(internallocking);mightrequireaccessthroughamutex (andmayormaynotautomaticallyacquirethatmutexonbehalfofaclientmethod); mightbeabletorunonlyintheeventqueue;etc. Alsodescribewhenanyeventsarefired:synchronously,asynchronously,etc. Ideas:<ahref="http://core.netbeans.org/proposals/threading/index.html#recommendations"shape="rect">ThreadingRecommendations</a>(inprogress) </hint> </question>
-->
<answer id="exec-threading">
Form editor classes are not thread safe. Whole form editor is designed as single-threaded app.
It is supposed to run in AWT thread only. Known entry points (e.g. actions) are checked for this.
</answer>
<!-- <questionid="perf-spi"when="init"> Howtheperformanceofthepluggedincodewillbeenforced? <hint> Ifyouallowforeigncodetobepluggedintoyourownmodule,how doyouenforcethatitwillbehavecorrectlyandquicklyandwillnot negativelyinfluencetheperformanceofyourownmodule? </hint> </question>
-->
<answer id="perf-spi">
Form editor calls constructor and property getter/setter methods of edited beans.
There's in no way ensured these beans behaves correctly in performance point of view.
</answer>
<!-- <questionid="security-grant"when="final"> Doesyourcodegrantadditionrightstosomecode? <hint>Avoidusingaclassloderthataddssomeextra permissionstoloadedcodeunlessrealynecessary. AlsonotethatyourAPIimplementation canalsoexposeunneededpermissionstoenemycodeby AccessController.doPrilileged()calls.</hint> </question>
-->
<answer id="security-grant">
Property change notification comming from (external) bean customizers are given privileged access.
</answer>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.