<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
        <meta name="author" content="kris.richards@sun.com">
        <link rel="stylesheet" href="https://netbeans.org/netbeans.css" type="text/css">
        <title>Visual Library Examples</title>
        <style type="text/css"><!--
            pre {
                border: 1px solid black;
                padding: 10px;
                background-color: #FFD;
            }
            table.framed {
                border: 2px solid black;
                border-collapse: collapse;
                border-spacing: 1px solid black;
            }
            table.framed th {
                background-color: #FFD;
                padding: 5px;
                border: 2px solid black;
                vertical-align: top;
            }
            table.framed td {
                padding: 5px;
                border: 1px solid black;
                vertical-align: top;
            }
            code {
                background-color: #FFD;
                border: 1px solid #DD0;
            }
            --></style>
    </head>

    <body>

        <h1>Visual Library Examples</h1>
        <p>There are a number of examples that can be used as a guide for writing code
            to the NetBeans Visual Library.</p>
        <p>Download the
            ZIP file below and unzip it:</p>
        <p><a href="visual.examples.zip">Simple NetBeans Application Project</a> </p>
        <p>This will produce a NetBeans Java Application
            project. Open it in NetBeans IDE. A long list of examples, the first few of
            which are shown below, will be available.</p>
        <p><img alt="Visual Samples" src="screenshots/visual-samples.png"></p>
        <p>Simply run the project. A dialog containing a 
            list of all the examples will appear. Double-click any of the items in the
            list to run the example. Note that all the supporting code for the examples
            is in the project. This is a good source for learning how to use the NetBeans
            Visual Library APIs.</p>

        <h2>List of Examples</h2>
        <ul>
            <li><strong>javaone.demo1.IconNodeWidget</strong> - how to create a composite widget
            <li><strong>javaone.demo2.ActionDemo</strong> - how to use actions
            <li><strong>javaone.demo3.ConnectionDemo</strong> - how to use <code>ConnectionWidget</code>
            <li><strong>javaone.demo4.GraphDemo</strong> - how to use graph-oriented scene implemented using <code>GraphScene</code>
            <li><strong>javaone.demo5.ManyObjectsDemo</strong> - performance test of 1113 nodes and 1110 edges on a single scene. Zoom-out to see more.
            <li><strong>javaone.demo6.LODDemo</strong> - how to use <code>LevelOfDetailsWidget</code>. Zoom-in to see more.
            <li><strong>test.action.ActionMapActionTest</strong> - how to use <code>ActionMapAction</code>
            <li><strong>test.action.PanActionTest</strong> - test of <code>PanAction</code>
            <li><strong>test.action.PopupMenuActionTest</strong> - test of <code>PopupMenuAction</code>
            <li><strong>test.action.SelectLockedActionTest</strong> - example of proper cooperation of select (which opens another Swing windows) and locking action
            <li><strong>test.action.WheelPanActionTest</strong> - how to use <code>WheelPanAction</code>
            <li><strong>test.alignwith.AlignWithClientAreaTest</strong> - test of #105285 - align-with action with checking client area of widgets only
            <li><strong>test.alignwith.AlignWithMoveGuideLinesTest</strong> - test of #97034 - incorrectly painted guide-lines for <code>MoveAlignWithAction</code>
            <li><strong>test.alignwith.AlignWithTest</strong> - how to use <code>MoveAlignWithAction</code>
            <li><strong>test.alignwith.AlignWithResizeTest</strong> - how to use <code>AlignWithMoveAction</code> and <code>AlignWithResizeAction</code>
            <li><strong>test.anchor.ArrowAnchorShapeTest</strong> - test of <code>ArrowAnchorShape</code>
            <li><strong>test.anchor.AnchorShapeWidthTest</strong> - test of bugfix #91613 - Incorrectly rendered AnchorShapes
            <li><strong>test.anchor.ImageAnchorShapeTest</strong> - test of <code>ImageAnchorShape</code>
            <li><strong>test.anchor.InvalidAnchorNegativeTest</strong> - negative test of invalid anchor (its related widget is not added into scene)
            <li><strong>test.animator.AnimatorTest</strong> - how to use preferred-location animator
            <li><strong>test.animator.ColorAnimatorTest</strong> - how to use background/foreground animator
            <li><strong>test.bird.BirdViewTest</strong> - how to use bird view
            <li><strong>test.card.CardContainerWidget</strong> - how to use <code>CardLayout</code>
            <li><strong>test.component.ComponentTest</strong> - shows AWT/Swing integration
            <li><strong>test.component.ComponentModeTest</strong> - shows adding/removing modes of <code>ComponentWidget</code>
            <li><strong>test.connect.ConnectActionLockTest</strong> - test of bugfix #120766 - missing check in lockable actions
            <li><strong>test.connect.ConnectScene</strong> - how to <code>ConnectAction</code> and <code>ReconnectAction</code>
            <li><strong>test.connect.ExtendedConnectTest</strong> - test of <code>ExtendedConnectAction</code>
            <li><strong>test.connectionlabels.ConnectionLabelsTest</strong> - how to attach labels to <code>ConnectionWidget</code>
            <li><strong>test.connectionlabels.LabelsWithSameAnchorTest</strong> - test for issue #121215 - Labels Overlap
            <li><strong>test.constraint.ConstraintsTest</strong> - how to use widget constraints
            <li><strong>test.context.ContextTest</strong> - test of mouse-cursor context resolving
            <li><strong>test.controlpoint.AddRemoveControlPointTest</strong> - how to use <code>AddRemoveControlPointAction</code> and <code>MoveControlPointAction</code>
            <li><strong>test.controlpoint.ControlPointsCursorTest</strong> - test of <code>ConnectionWidget.controlPointsCursor</code> property
            <li><strong>test.convolve.ConvolveTest</strong> - how to use <code>ConvolveWidget</code>
            <li><strong>test.custom.CustomWidgetTest</strong> - how to create a custom widget
            <li><strong>test.devolve.DevolveTest</strong> - how to use scene-layout
            <li><strong>test.enable.EnableTest</strong> - how to use <code>Widget.setEnable</code> method
            <li><strong>test.expand.MouseOverExpandTest</strong> - how to create expand/collapse details functionality
            <li><strong>test.expand.ProxyAnchorExpandTest</strong> - how to use proxy anchor for expanding/collapsing functionality
            <li><strong>test.freeconnect.FreeConnectTest</strong> - how to <code>AddRemoveControlPointAction</code>, <code>FreeConnectionWidget</code>, <code>FreeRectangularAnchor</code> and <code>FreeRouter</code>
            <li><strong>test.general.GraphSceneTest</strong> - how to use <code>GraphScene</code>
            <li><strong>test.graph.GraphRemoveTest</strong> - test of <code>GraphPinScene.remove*WithEdges</code>
            <li><strong>test.graph.GraphTest</strong> - test of bug fix on <code>GraphScene.removeNode</code>
            <li><strong>test.graph.LoopEdgeTest</strong> - how to create a loop edge
            <li><strong>test.graphlayout.GridGraphLayoutTest</strong> - how to use <code>GridGraphLayout</code>
            <li><strong>test.graphlayout.TreeGraphLayoutTest</strong> - how to implement graph-oriented scene layout
            <li><strong>test.huge.HugeTest</strong> - similar to javaone.demo5.ManyObjectsDemo
            <li><strong>test.inplace.ExpansionDirectionsTest</strong> - how to specify expansion directions for <code>TextFieldInplaceEditor</code>
            <li><strong>test.inplace.InplaceEditorTest</strong> - how to use <code>TextFieldInplaceEditor</code>
            <li><strong>test.inplace.InvokeInplaceEditorTest</strong> - how to invoke in-place editor programatically
            <li><strong>test.inplace.JustifyAlignmentTest</strong> - test in-place text editor with justify layout of labels with right alignment
            <li><strong>test.inplace.RequestFocusTest</strong> - test of bugfix #96348 - requestFocus is not forwarded while editor is closing
            <li><strong>test.justify.JustifyTest</strong> - test of layout justification
            <li><strong>test.keyboard.EnterKeyProcessingTest</strong> - test of processing enter key
            <li><strong>test.keyboard.EnterKeyTest</strong> - test of cooperation of Swing with an enter key processing within in-place editor
            <li><strong>test.keyboard.KeyboardTest</strong> - test of <code>CycleObjectSceneFocusAction</code>
            <li><strong>test.label.LabelGlyphVectorTest</strong> - test of <code>LabelWidget</code> rendering using glyph vector
            <li><strong>test.label.LabelOrientationTest</strong> - test of orientation vs. alignment of text in <code>LabelWidget</code>
            <li><strong>test.layout.CardLayoutWithLabelTest</strong> - how to create non-jumping widget with card layout and label widget as child
            <li><strong>test.layout.FlowLayoutTest</strong> - test of bugfix #105400 - FlowLayout does not work correctly with negative location of child widgets
            <li><strong>test.layout.MinMaxFlowLayoutTest</strong> - test of <code>FlowLayout</code> cooperation with minimal size
            <li><strong>test.layout.OverlayLayoutWidgetTest</strong> - test of justification of <code>OverlayLayout</code>
            <li><strong>test.layout.WeightFlowLayoutTest</strong> - how to use weights in <code>FlowLayout</code>
            <li><strong>test.list.ListTest</strong> - how to use <code>ListWidget</code> and <code>ListItemWidget</code>
            <li><strong>test.listeners.ObjectSceneListenerTest</strong> - how to use <code>ObjectSceneListener</code>
            <li><strong>test.lod.LevelOfDetailsTest</strong> - how to use <code>LevelOfDetailsWidget</code>
            <li><strong>test.lod.TwoLimitsLevelOfDetailsTest</strong> - test of bugfix #123711 - Fade between soft/hard max in LevelOfDetailsWidget
            <li><strong>test.move.SnapToGridTest</strong> - how to use snap-to-grid move strategy
            <li><strong>test.multiline.MultiLineTest</strong> - how to create a multi-line label using <code>JLabel</code>
            <li><strong>test.multiview.MultiViewTest</strong> - how to create satellite views
            <li><strong>test.multiview.MultiViewTableTest</strong> - how to create satellite views
            <li><strong>test.object.MultiMoveActionTest</strong> - how to implement <code>MoveAction</code> for multiple objects
            <li><strong>test.object.MultipleWidgetsTest</strong> - how to use <code>ObjectScene</code> for 1-N mapping between objects and widgets
            <li><strong>test.object.ObjectTest</strong> - how to use <code>ObjectScene</code>
            <li><strong>test.order.ReverseOrderWidgetDependencyTest</strong> - how to implement a connection widget behind a related widgets
            <li><strong>test.repaint.RepaintTest</strong> - test of bugfix of repaint of <code>ConnectionWidget</code>
            <li><strong>test.resize.ResizeTest</strong> - how to use <code>ResizeAction</code>
            <li><strong>test.router.OSRCollisionsCollectorTest</strong> - test of bugfix #96462 - Incorrectly routed path by OrthogonalSearchRouter when a target in collision region
            <li><strong>test.router.OSRComputeControlPointsTest</strong> - test of bugfix #96460 - Wrong control points computation in OrthogonalSearchRouter
            <li><strong>test.routing.ActionsWithRoutingPolicyTest</strong> - how to use routing policy with <code>AddRemoveControlPointAction</code> and <code>MoveControlPointAction</code>
            <li><strong>test.routing.RoutingPolicyTest</strong> - how to use routing policy of <code>ConnectionWidget</code>
            <li><strong>test.sceneresize.LimitedSceneTest</strong> - test of cooperation of <code>OrthogonalSearchRouter</code> with <code>Scene.maximumBounds</code> property
            <li><strong>test.sceneresize.SceneResizeTest</strong> - test of bugfix #84604 - scene resize based on Scene view component
            <li><strong>test.scroll.ScrollTest</strong> - how to use <code>ScrollWidget</code> for scrollable view
            <li><strong>test.scroll.SwingScrollTest</strong> - how to use <code>SwingScrollWidget</code> for scrollable view which uses <code>JScrollBar</code> from Swing
            <li><strong>test.serialization.SceneSerializerTest</strong> - how to implement serialization of graph scene where nodes and edges are represented as Long objects
            <li><strong>test.swing.JButtonWidgetTest</strong> - how to implement zoom-able JButton
            <li><strong>test.swingborder.SwingBorderTest</strong> - how to use borders for Swing
            <li><strong>test.tool.CtrlKeySwitchToolTest</strong> - how to create active-tool switching using ctrl key
            <li><strong>test.tool.ToolTest</strong> - how to use action-tools
            <li><strong>test.view.OffscreenRenderingTest</strong> - how to off-screen render a scene
            <li><strong>test.view.TooltipTest</strong> - test of tool-tips
            <li><strong>test.visible.NotifyAddedRemovedTest</strong> - test of <code>Widget.notifyAdded</code> and <code>Widget.notifyRemoved</code> methods
            <li><strong>test.visible.VisibilityTest</strong> - compatibility test of <code>Layout</code> implementations with <code>Widget.visible</code> property
            <li><strong>test.vmd.VMDCollisionTest</strong> - test of <code>WidgetCollisionCollector</code>
            <li><strong>test.vmd.VMDColorSchemeTest</strong> - how to use <strong>VMDColorScheme</strong>
            <li><strong>test.vmd.VMDTest</strong> - how to use <strong>VMD</strong> plug-in
            <li><strong>test.widget.AnimatedImageTest</strong> - test of animated image in ImageWidget
            <li><strong>test.widget.ConnectionWidgetCutDistanceTest</strong> - how to use control point cut distance in <code>ConnectionWidget</code>
            <li><strong>test.widget.ConnectionWidgetOrderTest</strong> - test of widget order using connection widgets
            <li><strong>test.widget.IconNodeHeaderTest</strong> - how to implement relative header to an IconNodeWidget
            <li><strong>test.widget.RelativeDecorationTest</strong> - how to implement decoration relatively to widget location
            <li><strong>test.zoom.CenteredZoomTest</strong> - how to use <code>CenteredZoomAction</code>
            <li><strong>test.zoom.FitToViewTest</strong> - how to implement fit-to-view feature
            <li><strong>test.zoom.MouseCenteredZoomTest</strong> - how to use <code>MouseCenteredZoomAction</code>
        </ul>

    </body>