Griffon
Groovy-er desktop applications



                    © 2011 Eric Wendelin
Griffon
Building desktop apps for the JVM just
             got Groovy
import   java.awt.GridLayout;
import   java.awt.event.ActionListener;
import   java.awt.event.ActionEvent;
import   javax.swing.JFrame;
import   javax.swing.JTextField;
import   javax.swing.JButton;
import   javax.swing.SwingUtilities;

public class JavaFrame {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
             public void run() {	
                 JFrame frame = buildUI();
             }
             frame.setVisible(true);
        });
    }
    private static JFrame buildUI() {
        JFrame frame = new Jframe("JavaFrame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new GridLayout(3,1));
        final JTextField input = new JTextField(20);
        final JTextField output = new JTextField(20);
        output.setEditable(false); JButton button = new JButton("Click me!");
        button.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent event) {
	                output.setText(input.getText());
	           }
        });
        frame.getContentPane().add(input);
        frame.getContentPane().add(button);
        frame.getContentPane().add(output);
        frame.pack();
        return frame;
    }
  }
import groovy.swing.SwingBuilder
import static javax.swing.JFrame.EXIT_ON_CLOSE
new SwingBuilder().edt {
    frame(title: "GroovyFrame", pack: true, visible: true,
            defaultCloseOperation: EXIT_ON_CLOSE) {
        gridLayout(cols: 1, rows: 3)
        textField(id: "input", columns: 20)
        button("Click me!", actionPerformed: {
            output.text = input.text
        })
        textField(id: "output", columns: 20, editable: false)
    }
}
Based on
Ow! Pointy!


Convention
             >
              Configuration
MVC
griffon create-mvc Login
@Bindable
BOOM! Built in!



        griffon test-app
Lots of deployment
      options
     griffon package jar
application(title: ‘GroovyTitle’, pack: true) {
    gridLayout(cols: 1, rows: 3)
    textField(id: "input", columns: 20)
    button("Click me!", actionPerformed: {
        output.text = input.text
    })
    textField(id: "output", columns: 20, editable: false)
}
Plugins and Addons!
   griffon install-plugin easyb
Polyglot
griffon install-plugin jython
Multi-UI Toolkit
   Support
You should
probably buy me!
Thanks!
          also go here

griffon.codehaus.org

                 @eriwen
Groovy-er desktop applications with Griffon

Groovy-er desktop applications with Griffon

  • 1.
  • 2.
    Griffon Building desktop appsfor the JVM just got Groovy
  • 5.
    import java.awt.GridLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.SwingUtilities; public class JavaFrame { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable(){ public void run() { JFrame frame = buildUI(); } frame.setVisible(true); }); } private static JFrame buildUI() { JFrame frame = new Jframe("JavaFrame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(new GridLayout(3,1)); final JTextField input = new JTextField(20); final JTextField output = new JTextField(20); output.setEditable(false); JButton button = new JButton("Click me!"); button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event) { output.setText(input.getText()); } }); frame.getContentPane().add(input); frame.getContentPane().add(button); frame.getContentPane().add(output); frame.pack(); return frame; } }
  • 8.
    import groovy.swing.SwingBuilder import staticjavax.swing.JFrame.EXIT_ON_CLOSE new SwingBuilder().edt { frame(title: "GroovyFrame", pack: true, visible: true, defaultCloseOperation: EXIT_ON_CLOSE) { gridLayout(cols: 1, rows: 3) textField(id: "input", columns: 20) button("Click me!", actionPerformed: { output.text = input.text }) textField(id: "output", columns: 20, editable: false) } }
  • 10.
  • 11.
    Ow! Pointy! Convention > Configuration
  • 12.
  • 13.
  • 14.
    BOOM! Built in! griffon test-app
  • 15.
    Lots of deployment options griffon package jar
  • 16.
    application(title: ‘GroovyTitle’, pack:true) { gridLayout(cols: 1, rows: 3) textField(id: "input", columns: 20) button("Click me!", actionPerformed: { output.text = input.text }) textField(id: "output", columns: 20, editable: false) }
  • 17.
    Plugins and Addons! griffon install-plugin easyb
  • 18.
  • 19.
  • 20.
  • 21.
    Thanks! also go here griffon.codehaus.org @eriwen