Release Notes

April 30, 2005

About ULC 6.0

Release 6.0 includes the following new features:

The sections Fixed Bugs and Implemented Feature Requests give an overview of the most important differences between ULC 5.2.1 and ULC 6.0.

To migrate from ULC 5.2.1 to the ULC 6.0 please see the migration notes.

Version Notes

ULC 6.0 requires the Java Runtime Environment (JRE) 1.3.1 or later. It should run on any platform that supports JRE 1.3.1 or later.

The ULC client has been tested on Windows 2000/XP with the following deployment options:

The ULC server has been tested on Windows 2000/XP, Red Hat Linux 9.0, and Sun Solaris 8 with the following deployment options:

Note: Support for the Servlet API 2.2 has been deprecated in this release and will be removed in the next release.


Modules, Parts and Release Structure

The ULC release includes all components required to successfully develop and deploy ULC applications. The ULC modules, parts, packages, and the structure of the current release are described in the following sections.



The ULC release is split into modules. Each module belongs to exactly one of five categories:

The category and module names are reflected in the directory structure of the release, e.g. environment/applet for the applet module that belongs to the environement category.

A module directory contains subdirectories with the following contents:



Each of these modules can contain up to four parts:

The part names are reflected in the filename of the jar files in the lib and src directory of the corresponding module, e.g. ulc-applet-client.jar and ulc-applet-client-src.jar for the classes and source stubs of the applet module that have to be deployed on the client side.


Release Structure

ulc-6.0 ULC 6.0 home directory
Add-ons to the ULC base framework
   base ULC base framework
J2EE server integration including EJB container integration and Servlet container integration.
ULC documentation
Client environment integration for applet deployment, JNLP deployment, and standalone deployment.
   license the jar file with the deployment license key
   previous_releasenotes Previous release notes
Sample applications with ready to run Tomcat Servlet container
   build.txt Contains the build number
   LicenseAgreement.pdf The license Agreement
   releasenotes.html This document



Fixed Bugs

PR Description Comments
694JnlpFileService does not work for JRE 1.3.1  
723Closing the browser that contains the Applet may results in a severe exception  
747Drag does not work for tables when column selection is enabled  
813Strange behaviour of floatableULCToolbar Affected runtime behaviour:
  • exception occurs when using floatableULCToolBar improperly
  • use ULCBorderLayoutPane as top-level container and only add one component to CENTER. The ULCToolbar may be in any position NORTH, SOUTH, WEST, EAST. This analogous to Swing's behaviour/restrictions
816WebStart VM does not terminate in JRE 1.4  
822KeyStroke.getKeyStroke(String) does not work  
823NullPointerException when removing an ULCInternalFrame from DesktopPane  
825VM does not terminate if ULCAlert or ULCDialog with null owner is used  
832setDisplayedMnemonic fails  
835NullPointerException with ITreeExpansionListener  
840Defered ModelUpdateMode not respected if using renderers or editors  
841Unable to enter cell editor by single click if already editing  
842ULCTableTreeColumn.setHeaderRenderer() only works when the column already has been uploaded  
850ULCBorderPane.getTitle() does not work  
880Window size is sometimes one pixel too small  
882Caret position is not set explicitly in a ULCTextArea  
883ULCTabbedPane.setBackgroundAt() should have the same semantic as in Swing  
892JRE 1.3: ULCComboBox looses selection when adding items  
897setButtonGroup in ULCBoxPane does not work  
898ULCTableTree.moveColumn(int old, int new) moves from new to old instead of from old to new  
900ULCWindow.setVisible(true) does not make an open window the topmost window  
901ULCBoxPane.setBorder() does not work  
908index.html of samples contains absolute links instead of relative links  
909Problem with ULCList display  
915Drag & Drop does not work on ULCTree  
925Code completion with reduced sources does not work anymore  
927Java WebStart VM does not terminate if it once displays a dialog (error, security dialog, ...)  
929If default close operation is TERMINATE_ON_CLOSE then IApplication.stop() is not called  
931Using default buttons may lead to warnings on client side  
933ULCFrame.getDefaultCloseOperation() does never return TERMINATE_ON_CLOSE  
937Dialog location is not relativ to parent when dialog.setSize() is used  
939Endless ConcurrentModificationException when working with ULCTree  
940ULCTree does not work with TreeModels that are not based on ITreeNodes  
942Preferred size behaviour of ULCList is wrong  
949Adding a filler to a ULCBoxLayoutPane results in a class cast exception with JRE 1.3  
950Deprecated ULCDialog constructors do not respect passed title and modal arguments  
953setResizable(false) does not have effect in modal dialogs when called before setVisible(true)  
955Using default renderers results in a lot of traffic  
962UIStringDataType might throw NullPointerException  
970Using the empty constructor of ULCTable() / ULCTableTree() might result in a memory leak  
972fireContentsChanged() in a ULCComboBox might result in a IndexOutOfBoundsException on client side  
978UIEngine hangs sometimes on Linux  
979EJB Clustering is broken  



Implemented Feature Requests

PR Description Comments
215Add API pack() to windows New API:
  • public void ULCWindow.pack()

ULCWindow.setVisible(true) still invokes pack() if no explicit window size is set (unlike in Swing). There is no need to invoke ULCWindow.pack() prior to ULCWindow.setVisible(true). The ULCWindow.pack() API is provided to manually re-pack the window after adding/removing components.
374Add setOpaque to ULCComponents  
424ULCBorderPane.setMargin / ULCBoxPane.setMargin should take Insets ULCBorderPane and ULCBoxPane.setMargin() is deprecated, please use the new ULCEmptyBorder API.
See also migration notes
615add API to programmatically manipulate scrollbars New API:
  • ULCScrollBar.setPosition(double)
  • ULCScrollBar.addAdjustementListener(IAdjustementListener)
  • ULCComponent.scrollToVisible()
  • ULCTextComponent.scrollPositionToVisible(int)
642Provide API to execute code before/after application code is executed New API:
  • public interface IRoundTripListener
  • public static void ApplicationContext.addRoundTripListener(IRoundTripListener)
  • public static void ApplicationContext.removeRoundTripListener(IRoundTripListener)
700Drag & Drop operation should start on "click & drag"  
710Support for Actions as in Swing New API:
  • class com.ulcjava.base.application.IAction
  • class com.ulcjava.base.application.AbstractAction
  • ULCButton(IAction)
  • ULCMenuItem(IAction)
  • ULCMenu(IAction)
  • ULCCheckBoxMenuItem(IAction)
  • ULCRadioButtonMenuItem(IAction)
  • ULCToggleButton(IAction)
  • ULCCheckBox(IAction)
  • ULCRadioButton(IAction)
  • ULCAbstractButton.setAction(IAction)
  • ULCAbstractButton.getAction()
  • ULCTextField.setAction(IAction)
  • ULCTextField.getAction()
  • ULCComboBox.setAction(IAction)
  • ULCComboBox.getAction()
714Extend BoxPaneLayout to Support Weights New API:
  • ULCBoxPane.getHorizontalWeightOf(ULCComponent)
  • ULCBoxPane.getVerticalWeightOf(ULCComponent)
  • ULCBoxPane.add(double horizontalWeight, double verticalWeight, String alignment, ULCComponent component)
  • ULCBoxPane.add(int horizontalSpan, double horizontalWeight, double verticalWeight, String alignment, ULCComponent component)
  • ULCBoxPane.set(int column, int row, double horizontalWeight, double verticalWeight, String alignment, ULCComponent component)
753Improve table drag under feedback if cell selection is enabled  
783Pause and resume for sessions is not supported Please have a look at the following classes to get an idea of how these feature can be used:
  • com.ulcjava.sample.teammembers.client.ResumeLauncher
    This is a launcher that displays a basic GUI to start, pause, resume and stop a ULC application. You can find the complete source code of the ResumeLauncher in the TeamMembers sample module.
  • com.ulcjava.sample.teammembers.client.TeamMembersResumeLauncher
    This is an startable class that uses the ResumeLauncher to start the TeamMembers application.
799Provide a way to set the margin used by ULCFrame  
809Allow setting of orientation on ULCSeparator
  • public ULCSeparator(int orientation)
  • public void setOrientation(int orientation)
810Provide ULCToolbar.ULCSeparator, analogous to Swing New API:
  • public class ULCToolBar.ULCSeparator
811Do not disable all contained widgets when a container component is disabled Affected runtime behaviour:
  • when a container is disabled, its children are not automatically disabled
814All container components should inherit from abstract layout pane classes  
824ULCInternalFrame should extend from ULCRootPane  
827Provide a hook to execute code at the end of a server round-trip  
829Provide ULCList.setVisibleRowCount() API New API:
  • public void ULCList.setVisibleRowCount(int)
  • public int ULCList.getVisibleRowCount()
831ULCList: do not set default preferred size of 150/300  
833ULCInternalFrame.setSelected() is missing New API:
  • ULCInternalFrame.setSelected(boolean)
834ULCDesktopPane.setSelectedFrame is missing New API:
  • ULCDesktopPane.setSelectedFrame(ULCInternalFrame)
837Provide API to navigate the component tree New API:
  • public int ULCContainer.getComponentCount()
  • public ULCComponent[] ULCContainer.getComponents()
  • public ULCContainer ULCComponent.getParent()
838Introduce Borders with API similar to Swing Borders New API:
  • ULCComponent.setBorder(ULCAbstractBorder)
New Classes:
  • ULCAbstractBorder
  • ULCBevelBorder
  • ULCCompoundBorder
  • ULCEmptyBorder
  • ULCEtchedBorder
  • ULCLineBorder
  • ULCMatteBorder
  • ULCTitledBorder
  • BorderFactory
839Introduce ScrollPane with API similar to JScrollPane New API:
  • public class ULCScrollPane
  • public class ULCScrollBar

Added init parameter for implicit scroll pane handling: implicit-scrollpane-support
843Code signing: all permission services are located in ulc-base-client.jar moved all permission services to new jar file: ulc-base-trusted.jar
844ULCListSelectionModel and ULCTreeSelectionModel should implement IHasChangedSource  
847ULCAlert.setParent() should take ULCRootPane as argument  
874Provide ULCFrame.getFrames() and ULCWindow.getOwnedWindows() API as in Swing  
875Provide Font.deriveFont() API New API:
  • Font.deriveFont(AffineTransform)
  • Font.deriveFont(float)
  • Font.deriveFont(int)
  • Font.deriveFont(int, float)
  • Font.getAffineTransform()
876Provide Font.getSize2D() API as in Swing New API:
  • Font.getSize2D()
Font size is new a float value and no longer an int value
877Provide ULCComponent.setName() API as in Swing  
888Provide bottomComponent and topComponent properties on ULCSplitPane New API:
  • public void ULCSplitPane.getBottomComponent()
  • public void ULCSplitPane.setBottomComponent(ULCComponent)
  • public void ULCSplitPane.getTopComponent()
  • public void ULCSplitPane.setTopComponent(ULCComponent)
  • public void ULCSplitPane.isOneTouchExpandable() replaces ULCSplitPane.getOneTouchExpandable()
889Provide ULCComponent.scrollToVisible API  
890Provide a way to configure behaviour of ULC widget inside ULCScrollPane New API:
  • public void ULCTree.setVisibleRowCount(int)
  • public int ULCTree.getVisibleRowCount()
  • public void ULCTable.setPreferredScrollableViewportSize(Dimension)
  • public Dimension ULCTable.getPreferredScrollableViewportSize()
  • public void ULCTableTree.setPreferredScrollableViewportSize(Dimension)
  • public Dimension ULCTableTree.getPreferredScrollableViewportSize()
899Color should support methods Color.brighter() and Color.darker()  
902Align ULCMenu to swing menus regarding popup New ULCPopupMenu for menu subcomponents and as a popup menu for all components.
New API:
  • ULCPopupMenu.add(String)
  • ULCMenu.getComponentPopupMenu()
  • ULCComponent.setComponentPopupMenu()
  • ULCComponent.getComponentPopupMenu()
  • ULCComponent.setInheritsPopupMenu(boolean)
  • ULCComponent.getInheritsPopupMenu()
903container API cleanup  
911ULCStringDataType: do case conversion while typing  
914ULC should not rely on system properties as the SecurityManager controlles access to them  
921ClientContext should return the clients TimeZoneNew API:
  • ClientContext.getTimeZone()
923Installer should check for an already installed valid license before asking for a new one  
926DevelopmentRunner should provide a means to configure the log-level of the default log managerIntroduced DevelopmentRunner.setLogLevel(Level)
944Client side representation of ULCFiller should be Box.Filler instead of an empty JLabel This change has the following side effect: ULCFiller is now non opaque when setting the background. If you have used ULCFiller to show a different background then you should use ULCBoxPane with a corresponding preferred size instead of ULCFiller.
954DevelopmentRunnerGui should allow to change connection type at runtime  
956ClientContext.getBorder() should return the same border for the same key  
958Server container integration should support custom commands  
959Add support for variable row height lists  
960Add support for variable row height trees  
961A server round trip can be triggered before the system is idle  
967Add pack() to ULCInternalFrame  



Migration Notes



Margins and Alignment






Multiline label text and tool tip


Popup menu


Extension API


Trusted code



Known Problems and Limitations

Product and company names herein may be trademarks of their respective owners.

Copyright (c) 2000-2015 Canoo Engineering AG