Why Node Labels Exceed the Width of Their Nodes

Questions & Answers

Summary

Node labels can exceed the width of their nodes depending on the zoom level.
For a better user experience, please go to the integrated documentation viewer to read this article.

Description

The yFiles library uses Java's font rendering mechanism to scale the text of node labels according to the current zoom level of the view. This rendering mechanism, however, yields non-linear results regarding the width of text, since both text spacing and glyphs can be different at subsequent zoom levels.
As a consequence, it is possible that node labels exceed the width of their nodes when the zoom level changes (both increases or decreases).

Zoom level 91%

Original size

Zoom level 110%

Zoom level 121%

Possible Solutions

A possible workaround that better keeps the label text inside its node, relies on using fractional metrics for the rendering. Fractional metrics is supported by Java by means of a rendering hint set on the Graphics2D context. The following code snippet shows how the rendering hint can be set using a customized DefaultGraph2DRenderer for a given view.

// 'view' is of type y.view.Graph2DView.

view.setGraph2DRenderer(new DefaultGraph2DRenderer() {
  protected void paint(Graphics2D gfx, NodeRealizer nr) {
    gfx.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
    super.paint(gfx, nr);
  }
});

As of yFiles version 2.6.1, using fractional metrics for rendering can be conveniently specified by means of the setRenderingHints method as presented in the following code snippet, for example.

// 'view' is of type y.view.Graph2DView.

RenderingHints rh = view.getRenderingHints();
rh.put(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
view.setRenderingHints(rh);
YLabel.setFractionMetricsForSizeCalculationEnabled(true);

Note that for consistent label rendering results, it is strongly recommended to also call the YLabel.setFractionMetricsForSizeCalculationEnabled class method appropriately.

Categories this article belongs to:
yFiles for Java > yFiles Viewer > Displaying and Editing Graphs > Realizer-Related Features
yFiles for Java > yFiles Viewer > Displaying and Editing Graphs > View Implementations
Applies to:
yFiles for Java 2: 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 2.10, 2.11, 2.12, 2.13, 2.14, 2.15, 2.16, 2.17, 2.18
Keywords:
node - label - text - zoom - fractional - metrics - font - size - rendering - hint - RenderingHints - Graph2DView - DefaultGraph2DRenderer - setGraph2DRenderer - Graphics2D - context - width - setRenderingHints - setFractionMetricsForSizeCalculationEnabled - YLabel