yFiles for Java Release Notes
yFiles for Java version 2.10 is the newest major release available.
It contains many exciting new features compared to older versions and is almost
completely API compatible with the 2.9 series.
(See also the entire yFiles for Java change log.)
Technical Requirements
- Oracle J2SDK 1.4 or higher is needed for software development with yFiles.
- Oracle J2RE 1.4 or higher is needed to execute programs using yFiles.
- A browser to view the HTML documentation.
yFiles 2.10 - Changes Since 2.9.0.2
Major Features Added
|
|
|
| New support for orthogonal and octilinear edge routing |
New support for advanced preferred edge label placement |
Layout
-
Class EdgeRouter is a new edge routing algorithm that produces polyline edge routes. The
segments of an edge are either orthogonal (i.e., the slope of each segment is a multiple of 90 degrees) or
octilinear (i.e., the slope of each segment is a multiple of 45 degrees). See OctilinearEdgeRouterDemo.
[To the corresponding section in the yFiles Developer's Guide...] - PolylineLayoutStage: A layout stage that adds polyline segments to the orthogonal edge paths of a graph.
- IncrementalHierarchicLayouter: Added support for octilinear edge routing, i.e., a routing style where the slope of each edge segment is a multiple of 45 degrees. Different edge routing styles can be specified using class RoutingStyle. See IncrementalHierarchicLayouterDemo.
-
PreferredPlacementDescriptor: A new descriptor that allows to specify advanced preferred placement
information for edge labels. See PreferredLabelPlacementDemo.
[To the corresponding section in the yFiles Developer's Guide...]
Minor Features Added
Viewer/Editor Interaction
- Added new class Graph2DViewMouseWheelScrollListener to support scrolling a Graph2DView's viewport in horizontal or vertical direction in response to mouse wheel events.
- DropSupport: New support for automatically splitting an edge in two when a node is dropped onto it.
- Added Graph2DViewActions.EditLabelAction which supports customization of label text editing in a Graph2DView.
- ColorOptionItem: Optionally, color values in option editors are now represented as hex triplets or quadruples (#RRGGBB or #RRGGBBAA) instead of decimal tuples. The new attribute ATTRIBUTE_DISPLAY_HEX_VALUES enables this representation.
- ColorOptionItem: Added editors which allow the editing, copying, and pasting of the textual representation of color values. The new attribute ATTRIBUTE_ALLOW_TEXT_INPUT enables these editors.
- GenericNodeRealizer: Introduced new GenericNodeRealizer.LabelFactory interface to allow customization of createNodeLabel without the need for subclassing.
- GenericEdgeRealizer: Introduced new GenericEdgeRealizer.LabelFactory interface to allow customization of createEdgeLabel without the need for subclassing.
- Graph2DPrinter: Added callback methods printPosterCoords and initializePosterCoordsFont to customize poster coordinates printing.
Layout
- Extended InteractiveOrganicLayouter with a single threaded mode.
- BalloonLayouter: New option to take into account the bounds of node labels when calculating a layout.
Improvements
- Added sample PortLocationModel implementation SidePortLocationModel to the NodePortsDemo.
- Improved the performance of PortCandidate which potentially improves the performance of the IncrementalHierarchicLayouter with rotated graphs with PortCandidates.
- GenericNodeRealizer.Factory: Fixed getImplementation to support GenericNodeRealizer.LayerHandler.
- Introduced interfaces EdgeLabelDeserializer.ConfigurationFactory and NodeLabelDeserializer.ConfigurationFactory to be able to handle unknown label configuration when parsing GraphML similar to the way GenericEdgeRealizer/GenericNodeRealizer/NodePort configurations are handled.
- GraphLayoutLineWrapper: Improved edge routing for overlapping edges (e.g., grouped edges).
- LayoutMorpher: Now animates label placement changes as well.
-
Graph2D: All selection related methods now call the appropriate
single-element version of
isSelected/setSelectedto determine/modify selection states. - Significantly reduced effort necessary to use customized implementations of GraphMLParser and GraphMLWriter for reading/writing GraphML.
- HierarchicLayouter now treats edge groups at empty group nodes like those on normal nodes instead of ignoring them like it is done for non-empty group nodes.
- LabelLayoutTranslator added option setAutoFlippingEnabled to specify whether or not edge labels should be automatically flipped if they would be upside-down.
- AbstractLabelingAlgorithm added option setAutoFlippingEnabled to specify whether or not edge labels associated with a "free" label model should be automatically flipped if they would be upside-down.
- GenericTreeLayouter creates more compact layouts, especially for trees with edge labels.
- PartialLayouter: Now considers edge ports when calculating the barycenter of a component (if setPositioningStrategy is set to SUBGRAPH_POSITIONING_STRATEGY_BARYCENTER).
- Added auto-flipping to RotatedDiscreteEdgeLabelModel and RotatedSliderEdgeLabelModel. Labels that are placed upside down by a layouter will be flipped.
- SmartOrganicLayouter: Now, fixed nodes are not moved by a fixed offset if scope is set to SCOPE_SUBSET.
- Optimized number of generated PortCandidates in RecursiveGroupLayouter for the core layouter.
- WeightedLayerer: Improved quality (i.e., reduced the number of reversed edges) if setWeightedCycleRemovalEnabled is enabled.
- Added the ability to DefaultNodePlacer to produce polyline style edge routings with sloped edge segments.
- Added the ability to DefaultPortAssignment to distribute edges at the border of the nodes.
Demos
- The new OctilinearEdgeRouterDemo
demonstrates the routing capabilities of class
EdgeRouter. - The existing IncrementalHierarchicLayouterDemo
shows how to configure the
IncrementalHierarchicLayouterto produce octilinear edge routes. - The new PreferredLabelPlacementDemo shows
how to configure the
PreferredPlacementDescriptorof labels and how this affects the label placement of different layouters. -
The new
IntersectionCalculatorDemo
shows how to correct edge connection points for non-rectangular nodes
when working without yFiles for Java's visualization framework in package
y.viewand sub-packages thereof.
Bugfixes
- IncrementalHierarchicLayouter: Fixed incorrect handling of port candidates in layouts where rotation and a mirror was set.
- YVector: Fixed rotate to no longer return vertically mirrored results.
- NodePort: Fixed several problems with updating connected edges on node port location changes.
- RotatedSliderEdgeLabelModel, SliderEdgeLabelModel, and SmartEdgeLabelModel: Improved label placement at zero-length edge segments.
- LayoutMorpher: Fixed animation methods to take newly changed settings into account when running the morpher in an AnimationPlayer.
- AbstractNodeRealizerSerializer: Fixed deserialization of nodes whose GraphML representation does not contain any node labels. (Previously, a default label was created for these nodes).
- SmartEdgeLabelModel: Improved label placement at zero-length edge segments to prevent NullPointerExceptions.
- SmartEdgeLabelModel: Improved interactive label placement after removing one or more edge segments to prevent NullPointerExceptions.
- EdgeRealizer and GenericEdgePainter now support VALUE_EDGE_LABEL_PAINTING_ON for sloppy painting.
- EditMode: Fixed cursor that sometimes changed to move cursor although mouse drag resulted in node resizing.
- MovePortMode: Fixed loss of inter-edge node port assignments when changing an inter-edge to a new end node.
- OrientedRectangle: Fixed intersectionPoint that calculated sometimes wrong intersection points.
- Fixed bug that caused ArrayIndexOutOfBoundsException in AspectRatioComponentLayerer.
- Fixed integer overflow when group compaction is activated in IncrementalHierarchicLayouter while layouting extremely large, deeply nested graphs.
- OrthogonalGroupLayouter supports labels at edges adjacent to group nodes.
- Fixed bad edge routings in FamilyTreeLayouter when there are several marriages between generations.
- IsolatedGroupComponentLayouter now considers labels in group bounds calculation if label awareness is enabled.
- IncrementalHierarchicLayouter: Fixed port handling of edges with a single edge port candidate that is contained in a set of node port candidates.
- OrthogonalLayouter and DirectedOrthogonalLayouter: Fixed bug that caused IllegalArgumentException if input graph contains overlapping parallel edges and from sketch mode is enabled (see setUseSketchDrawing).
- MoveSelectionMode: Fixed NullPointerException that resulted from deleting the moved nodes of a hierarchically organized graph and having Shift pressed when releasing the mouse.
Incompatible Changes
-
GIFIOHandler now uses
javax.imageio.ImageIO#getImageWritersByFormatName(String)to retrieve anjavax.imageio.ImageWriterfor encoding images inGIFformat. As of Java 1.6, such anImageWriteris available by default. For Java 1.4 and Java 1.5, a suitableImageWriterhas to be registered externally (using Java's service provider mechanism). - TableEditorFactory: All editor dialogs (i.e. color chooser, file chooser, multi-line string editor, etc.) now open by default centered on the table editor's ancestor window instead of centered on the screen.
- DefaultGenericAutoBoundsFeature: Methods that previously called one of the class's specific implementations of calcMinimumInsetBounds, getAutoBoundsInsets, or getMinimumSize directly now call the corresponding method of the given context realizer to allow for decoration.
- EdgeLabel: Method setModel does no longer call method setDistance.
- EdgeLabelLayout: Removed method getPreferredPlacement and added method getPreferredPlacementDescriptor.
- PartialLayouter: Replaced method configureOrthogonalEdgeRouter by method configureEdgeRouter.
- PartialLayouter: Method setEdgeRoutingStrategy now disables a previously set customized edge router.









