Extending Groovys Swing User Interface in Builder to Build Richer Applications

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Extending Groovys Swing User Interface in Builder to Build Richer Applications - Presentation Transcript

    1. Extending Groovys Swing User Interface in Builder to Build Richer Applications Danno Ferrin, Intelligent Software Solutions, Inc. James Williams, Spatial Networks, Inc. BOF-5110 Speaker’s logo here (optional)
        • Learn how to customized Groovy’s SwingBuilder to add custom widgets and non-visual components.
    2. Not always an enterprise question…
      • BUT WILL IT
      • S C A L E
      • ?
    3. Agenda
      • Ways to Extend SwingBuilder
      • FactoryBuilderSupport Overview
      • Case Study: SwingXBuilder
    4. First some Terminology
      • nodeName( argument, attr : value, attr2 : value) { … }
      • Node
        • Syntactically a method call, but it represents a widget or bean
      • Argument
        • The un-named method argument for the node
        • As of Groovy 1.5 there can be only one
      • Attribute
        • Any named parameter in the node
        • Names cannot be duplicated – enforced by the Compiler
      • Child Content
        • The closure after the method
        • Usually executed by the builder
    5. Agenda
      • Ways to Extend SwingBuilder
      • FactoryBuilderSupport Overview
      • Case Study: SwingXBuilder
    6. Issues of Scale How you extend should be driven by how much the extension is used
      • Magic Nodes
        • bean(), widget(), container()
      • Individual Factory Registration
        • Automatic Bean Factory
        • Custom Factory
      • Builder Suite
        • Example: SwingXBuilder
      • CompositeBuilder
        • <Coming Soon>
      • Single use of particular widgets
      • Multiple uses of a few types
      • Multiple use of a lot of types
      • Multiple uses from multiple suites
    7. Magic Nodes
      • bean(…)
        • Accepts any object
        • Not added to parent
        • No child content
      • widget(…)
        • Accepts any java.awt.Component
        • Added to parent java.awt.Container
        • No child content
      • container(…)
        • Accepts any java.awt.Container
        • Added to parent java.awt.Container
        • Accepts child content
    8. Magic Nodes
      • An instance of the object must be passed in as the argument
      • Attributes are applied as JavaBeans properties
      • Semi-Magic Nodes
        • Most existing nodes can become magic nodes
        • Argument must match node type
    9. Magic Nodes Example
      • bean(model, propertyChanged: { panel.repaint() } )
      • widget(new JXMonthPanel(),
      • selectedBackground:Color.YELLOW)
      • container(new JXTitlePane(), title:&quot;Demo”) {
      • // whatever you would add in the JXTitlePane
      • }
    10. Individual Factory Registration
      • First, what are the characteristics of the Widget?
      • Well behaved JavaBeans
        • No-args constructor
        • Bean can be fully configured via properties
      • Complex Beans/Objects
        • Only constructors with arguments
        • Some features configured only by constructor
          • Example: JFrame, JWindow, JDialog owner
        • Non-JavaBeans style properties/configuration
    11. Individual Factory Registration
      • Well behaved JavaBeans may use registerBeanFactory(…)
        • All lifecycle methods are automated
        • No fancy processing
        • Child nodes added via JComponent.add(child [,constraints])
      • Complex Beans/Objects must use registerFactory(…)
        • Must implement groovy.util.Factory
        • May extend groovy.util.AbstractFactory
          • newInstance(builder, name, arg, attrs) is the only unimplemented method
    12. Builder Suite
      • Logical progression from creating factories
      • Subclass SwingBuilder
        • Do magic in the Constructor
        • SwingBuilder factories can be over-ridden
        • SwingBuilder factories can be renamed –
          • getFactories().each {k, v -> registerFactory(&quot;j&quot; + k, v) }
    13. Builder Suite
      • But what if I want multiple suites?
        • JideSplitButton
        • JXMap
        • JRibbon
      • Ways to Add more than one suite
        • Manually add via magic nodes
        • Manual add factories after construction
        • Hand roll a custom suite
      • This can be burdensome….
    14. Composite Builder
      • Coming Soon
        • Won’t be in Groovy 1.6 core
      • The Idea
        • Declare a builder that is a composite of other builders
        • Have each builder use a common Binding
        • Allow children of one builder to nest inside another
          • Widgets from different libraries
          • Nesting non-GUI Widgets
            • tree() { rootFolder { treeNode(); treeNode(); treeNode(); } }
    15. The Vision
        • def builder = new CompositeBuilder( SwingBuilder, ogb:ObjectGraphBuilder, jx:SwingXBuilder, jide:JIDEBuilder, fl:FlamingoBuilder, nodeName: randomFactory ) builder.jxframe { ribbon { editActionsGroup, saveActionsGroup }
        • jidepopup(visible:false) { … popup contents … } }
    16. The code as of Today
      • Called ‘UberBuilder’
        • Available on SVN (only for the brave…)
        • https://svn.codehaus.org/groovy/trunk/groovy/modules/griffon/
      • GUIBuilder is an auto composite of a few builders
        • SwingBuilder
        • SwingXBuilder
        • JIDEBuilder
        • GraphicsBuilder
      • Not quite soup yet…
    17. Agenda
      • Ways to Extend SwingBuilder
      • FactoryBuilderSupport Overview
      • Case Study: SwingXBuilder
    18. Factory Lifecycle
    19. Delegate Closures
      • Some steps can be intercepted without a Factory
        • addPreInstantiateDelegate, addPostInstantiateDelegate, addAttributeDelegate
          • {FactoryBulderSupport builder, Object node, Map attributes -> … }
        • addPostNodeCompleteDelegate
          • {FactoryBulderSupport builder, Object parent, Object node -> … }
      • Delegates handle all nodes
        • No picking and choosing, each closure must handle every call
      • Some built-in tasks done via delegates
        • Handling of constraints: attributes
        • Handling of id: attributes
        • Handling of bind() and attributes
    20. Agenda
      • Ways to Extend SwingBuilder
      • FactoryBuilderSupport Overview
      • Case Study: SwingXBuilder
    21. SwingXBuilder
      • Google Summer of Code 2007 project
        • James Williams – Nova Southeastern University, FL
      • Proof of concept for SwingBuilder extension
      • First Groovy builder in 100% Groovy
        • SwingBuilder later ported to Groovy
    22. Summary
      • SwingBuilder extension is easy
      • Choose your extension method based on frequency of use
      • FactoryBuilderSupport FTW
      • Look to SwingXBuilder to see how it’s been done
    23. For More Information
      • TS-5098
        • Friday at 12:10 in EP 305
        • Covers more of the SwingBuilder basics not covered here
      • Groovy
        • http://groovy.codehaus.org
      • Builders mentioned in this presentation
        • http://groovy.codehaus.org/Swing+Builder
        • http://groovy.codehaus.org/SwingXBuilder
        • http://groovy.codehaus.org/JideBuilder
        • http://groovy.codehaus.org/GraphicsBuilder
      • Groovy Swing team blogs
        • http://jroller.com/aalmiray
        • http://www.jameswilliams.be/blog
        • http://www.shemnon.com/speling
    24. Danno Ferrin, Intelligent Software Solutions, Inc. James Williams, Spatial Networks, Inc. BOF-5110 Speaker’s logo here (optional)

    + James WilliamsJames Williams, 11 months ago

    custom

    583 views, 0 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 583
      • 583 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 17
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories