GoDiagram by Northwoods Software

JGo: GoDiagram™ for Java

The JGo package, com.nwoods.jgo, is a set of classes built on the Java 2 platform, including Java2D and Swing. JGo makes it easy to deliver user interfaces that allow users to see and manipulate diagrams of two-dimensional graphical objects arranged in a scrollable, zoomable window. You can use JGo to build stand-alone Swing applications, Swing applets, and thin-client web applications using Java Server Pages (JS) or servlets.

JGo provides a variety of basic graphical objects such as rectangles, ellipses, polygons, text, images, and lines. You can group objects together to form more complex objects. You can customize their appearances and behaviors by setting properties and overriding methods.

A JGo view is a component that displays a JGo document. It supports mouse-based object manipulation, including selecting, resizing, moving and copying using drag-and-drop. A JGo view also supports in-place editing, printing, and grids.

A JGo document implements a model that supports manipulation of objects. Adding an object to the document makes it visible in the document's views. You can organize objects in layers. JGo provides support for composing and manipulating graphs (node & arc diagrams), where nodes have ports that are connected by links.

The JGo library is flexible and extensible. Many predefined example node classes make it easy to build many kinds of diagrams. You can easily customize most objects for application-specific purposes by setting properties or by subclassing. You can add completely new graphical objects to the existing framework.

JGo is written entirely in portable Java source code. It only depends on the standard Java2 packages and does not explicitly call any native functions.

Features of JGo

  • document view architecture
  • rich set of built-in components and links
  • ability to customize, extend, or create your own components
  • support for multiple layers
  • view events and listeners (to be notified of user interaction with diagram)
  • automatic support for zooming and scrolling
  • automatic clipboard support
  • automatic support for unlimited undo and redo
  • drag-and-drop support between components
  • tooltips for JGo objects
  • orthogonal and bezier curve links
  • grids and snapping behavior
  • collapsible subgraphs
  • printing framework
  • support for thin-client web applications using Java Server Pages (JSP)
  • support for automatic layout, available in the Professional version
  • support for instruments (interactive dials and gauges), available in the Professional version
  • Java2D features such as thick and dotted line pens
  • many performance optimizations, in both time and space 
  • support for JComponents as JGoControls
  • good documentation
  • several useful example applications

Platforms

JGo Swing is built on the Java 2 platform and work with any Java SDK 1.2 or later. JGo SWT is also available for SWT/Eclipse and requires SWT version 3.0 or later. There is currently no support for JGoInstruments or thin-client JSP applications in the JGo SWT version.

New in JGo 5.4

  • Created new com.nwoods.jgo.web package (JGoWeb.jar) simplifying creation of thin-client web applications using Java Server Pages (JSP)
    • Added JGoJPEGView class to JGoWeb. This is the JGoView base class that should be used
      for all JGoViews used in JSP pages. This class is able to generate a JPEG image corresponding
      from the diagram shown in the view.
    • Added JGoImageServlet to JGoWeb. This is the image servlet that should be referenced
      in the <img> element in a JGo JSP page.
    • Added JGoImageEventProcessor to JGoWeb. The JGoWeb.js javascript functions handle
      local mouse events resulting from user interaction with the diagram on a web page. Arguments generated from these events are automatically passed back to the server and processed by the JGoImageEventProcessor class.
  • Added 4 new JGoWeb sample applications
    • webminimalreadonly: an extremely small sample application demonstrating the creation of a read-only JGo diagram on a JSP web page.
    • webuserguidesample: a sample application described in a new chapter in the JGo User Guide illustrating the major features of JGo JSP web applications.
    • webdragdropeditor: a sample application including a pallet of sample objects that can be dragged, dropped, and interconnecting in a work area on a web page. Selected object properties are displayed and can be modified via the web page.
    • webprimates: a sample application containing a large diagram that can be browsed via scrolling and zooming. Additional details about diagram nodes are made available as tooltips. Both scrolling and tooltips are handled locally on the client browser for good performance.

New in JGo 5.3

  • Added JGoTreeAutoLayout and associated classes for faster and more flexible layouts of primarily tree-structured graphs.
  • Added AnimatedBasicApp sample application demonstrating animated links
  • Added Balloon class for creating balloon comments pointing to an associated JGoObject

New in JGo 5.2

  • added JGoCollection, a light weight JGoObjectCollection that you can pass to any method that requires a JGoObjectCollection or JGoObjectSimpleCollection
  • added JGoDocument property: LinksLayer, the layer to hold links; initially same as JGoDocument.getDefaultLayer()
  • added JGoDocument.add method, which adds links to the JGoDocument.getLinksLayer() and non-links to the getDefaultLayer()
  • added JGoDocument.addCopy method, a convenient way to make a copy of a JGoObject and add it to a JGoDocument
  • added JGoObject.copy method, a convenient way to make a copy of a JGoObject without adding it to a JGoDocument
  • added JGoSelection.toArray, addArray, and addCollection
  • added JGoViewEvent.SELECTION_STARTING and SELECTION_FINISHED events, raised before and after many objects are selected or de-selected
  • changed, improved JGoPrintPreview (Swing)
  • refactored JGoSubGraph by splitting into a new base class, JGoSubGraphBase, that can be used to implement your own subgraphs
  • added UpdateDemo and BoxApp example applications (Swing)

New in 5.1

  • Added JGoArea.addCollection and JGoLayer.addCollection, to support reparenting nodes without getting the links disconnected
  • Many JGoSubGraph enhancements
  • New picking and selecting methods and properties
  • Added JGoDocument.isUnoccupied, to tell whether there are any "avoidable" objects in a rectangular region
  • Added JGoDocument ValidCycle property, with associated constants and methods
  • Improved support for headless servers
  • Improved stroke path for self-loop links to observe Curviness value
  • Added JGoLink RoundedCorners property
  • Added JGoObject.isUpdatePartner, setUpdatePartner, and partnerUpdate method, called by JGoObject.update
  • Added JGoView.printPreview
  • Added JGoActionObject interface and a new state to JGoView for handling JGoActionObjects, such as buttons or knobs
  • Improved routing of Orthogonal links in layered-digraph autolayout
  • Added overloads to various JGoNetwork methods to take JGoObject instead of JGoNetworkNode, for convenience in customizing the network that will be laid out
  • Added JGoXMLSaveRestore interface for easier persistence of custom objects
  • Added SVGImage example class
  • Added RotText and RotImage example classes to Demo1
  • Added JTreeApp example app

New in 5.0

  • Improved bean support
    • Bean information provided for JGoView, JGoPalette, and JGoOverview, allowing tighter integration with most Java IDEs, including visual editing of user interfaces, property editors, and easier association of event listeners.
  • Added JGoOverview and JGoPalette (previously example classes, but now with additional features)
  • Added many view events (cases of JGoViewEvent, such as LINK_CREATED and OBJECT_EDITED)
  • Improved moving and copying to avoid recalculating link strokes
  • Added AdjustingStyle property to JGoLink, to control how the link stroke is replotted when a port is moved
  • Added Curviness property to JGoLink, so that cubic (Bezier) links are automatically curved
  • Added ValidSelfNode and ValidDuplicateLinks properties to JGoPort, heeded by JGoPort.validLink
  • Added methods to JGoArea (moveChildren, rescaleChildren, and layoutChildren) called by geometryChange and geometryChangeChild
  • Added AutoRescale property to JGoObject, heeded by JGoArea.rescaleChildren
  • Added generic JGoNode class
  • Added JGoBasicNode, JGoIconicNode, JGoTextNode, JGoSubGraph (previously example classes, but now with additional features)
  • Added PartID property to JGoLink and JGoPort and JGoNode, maintained by JGoDocument when JGoDocument.setMaintainsPartIDs(true)
  • Added some flexibility to SVG generation
  • Improved performance of JGoLayeredDiagraphAutoLayout
  • Changed example code:
    • overrides assume super JGoArea.copyChildren copies all child objects and adds them to the area
    • replaced overrides of geometryChange and geometryChangeChild with overrides of layoutChildren
    • changed overrides of JGoPort.validLink to use new ValidSelfNode and ValidDuplicateLinks functionality

New in 4.1

  • SVG
  • graphs within graphs
  • text wrapping
  • Bezier curves (strokes, links and polygons)
  • automatic routing of orthogonal links to avoid nodes
  • extensive and customizable user-input features
  • new example classes and applications
  • and dozens of other new features.

New in 4.0

  • example servlet using JPEGView to produce images for web servers
  • support for Swing undo/redo
  • option to allow views to show objects at negative coordinates
  • greeking of JGoText and JGoPort at small scales, sensitive to printing
  • DefaultBase property for JGoImages, for convenience when loading images in Applets
  • resizing a link to connect it to a new port now modifies the existing link
  • example code for reading and writing XML files for Flower processes
  • new GeneralNode example classes, with varying numbers of labeled ports
  • new JPEGView example class, to demonstrate producing JPEG images from documents
  • new Overview example class in Demo1, allowing navigation of another view
  • improvements to the Flower editor sample

Customer Gallery

See the diverse set of applications our customers are building.

"The layout package is what ultimately sold me on the JGo products. While thestandard JGo library is good, it is great with the addition of the layout algorithms."