Enviar búsqueda
Cargar
Griffon不定期便〜G*ワークショップ編〜
•
0 recomendaciones
•
1,762 vistas
Kiyotaka Oku
Seguir
Tecnología
Educación
Vista de diapositivas
Denunciar
Compartir
Vista de diapositivas
Denunciar
Compartir
1 de 56
Descargar ahora
Descargar para leer sin conexión
Recomendados
Applet 2 container and action_listener
Applet 2 container and action_listener
Nitigan Nakjuatong
Model-Driven Software Development - Context-Sensitive Transformation
Model-Driven Software Development - Context-Sensitive Transformation
Eelco Visser
EMFPath
EMFPath
mikaelbarbero
Managing parallelism using coroutines
Managing parallelism using coroutines
Fabio Collini
Kotlin delegates in practice - Kotlin Everywhere Stockholm
Kotlin delegates in practice - Kotlin Everywhere Stockholm
Fabio Collini
Kotlin Delegates in practice - Kotlin community conf
Kotlin Delegates in practice - Kotlin community conf
Fabio Collini
Architectures in the compose world
Architectures in the compose world
Fabio Collini
Vaadin7
Vaadin7
Joonas Lehtinen
Recomendados
Applet 2 container and action_listener
Applet 2 container and action_listener
Nitigan Nakjuatong
Model-Driven Software Development - Context-Sensitive Transformation
Model-Driven Software Development - Context-Sensitive Transformation
Eelco Visser
EMFPath
EMFPath
mikaelbarbero
Managing parallelism using coroutines
Managing parallelism using coroutines
Fabio Collini
Kotlin delegates in practice - Kotlin Everywhere Stockholm
Kotlin delegates in practice - Kotlin Everywhere Stockholm
Fabio Collini
Kotlin Delegates in practice - Kotlin community conf
Kotlin Delegates in practice - Kotlin community conf
Fabio Collini
Architectures in the compose world
Architectures in the compose world
Fabio Collini
Vaadin7
Vaadin7
Joonas Lehtinen
Testing Android apps based on Dagger and RxJava Droidcon UK
Testing Android apps based on Dagger and RxJava Droidcon UK
Fabio Collini
5 Favorite Gems (Lightning Talk(
5 Favorite Gems (Lightning Talk(
Mark
Quiniela
Quiniela
jbersosa
Say Hello To Ecmascript 5
Say Hello To Ecmascript 5
Juriy Zaytsev
Graphical User Components Part 1
Graphical User Components Part 1
Andy Juan Sarango Veliz
How do we use hooks
How do we use hooks
Jim Liu
Kotlin Generation
Kotlin Generation
Minseo Chayabanjonglerd
Graphical User Interface (GUI) - 2
Graphical User Interface (GUI) - 2
PRN USM
Exercícios Netbeans - Vera Cymbron
Exercícios Netbeans - Vera Cymbron
cymbron
Scala101, first steps with Scala
Scala101, first steps with Scala
Giampaolo Trapasso
Swiss army knife Spring
Swiss army knife Spring
Mario Fusco
New text document
New text document
mirzaaabdulmanan
RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017
Wanbok Choi
Refactoring group 1 - chapter 3,4,6
Refactoring group 1 - chapter 3,4,6
Duy Lâm
Swing
Swing
Bharat17485
Intro to Advanced JavaScript
Intro to Advanced JavaScript
ryanstout
Doc Parsers Api Cheatsheet 1 0
Doc Parsers Api Cheatsheet 1 0
Oleh Burkhay
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기
Wanbok Choi
Ian 20150116 java script oop
Ian 20150116 java script oop
LearningTech
Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"
Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"
ZendCon
Jenkins入門
Jenkins入門
Kiyotaka Oku
ミニ四駆ジャパンカップで勝つ方法を考える
ミニ四駆ジャパンカップで勝つ方法を考える
Kiyotaka Oku
Más contenido relacionado
La actualidad más candente
Testing Android apps based on Dagger and RxJava Droidcon UK
Testing Android apps based on Dagger and RxJava Droidcon UK
Fabio Collini
5 Favorite Gems (Lightning Talk(
5 Favorite Gems (Lightning Talk(
Mark
Quiniela
Quiniela
jbersosa
Say Hello To Ecmascript 5
Say Hello To Ecmascript 5
Juriy Zaytsev
Graphical User Components Part 1
Graphical User Components Part 1
Andy Juan Sarango Veliz
How do we use hooks
How do we use hooks
Jim Liu
Kotlin Generation
Kotlin Generation
Minseo Chayabanjonglerd
Graphical User Interface (GUI) - 2
Graphical User Interface (GUI) - 2
PRN USM
Exercícios Netbeans - Vera Cymbron
Exercícios Netbeans - Vera Cymbron
cymbron
Scala101, first steps with Scala
Scala101, first steps with Scala
Giampaolo Trapasso
Swiss army knife Spring
Swiss army knife Spring
Mario Fusco
New text document
New text document
mirzaaabdulmanan
RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017
Wanbok Choi
Refactoring group 1 - chapter 3,4,6
Refactoring group 1 - chapter 3,4,6
Duy Lâm
Swing
Swing
Bharat17485
Intro to Advanced JavaScript
Intro to Advanced JavaScript
ryanstout
Doc Parsers Api Cheatsheet 1 0
Doc Parsers Api Cheatsheet 1 0
Oleh Burkhay
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기
Wanbok Choi
Ian 20150116 java script oop
Ian 20150116 java script oop
LearningTech
Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"
Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"
ZendCon
La actualidad más candente
(20)
Testing Android apps based on Dagger and RxJava Droidcon UK
Testing Android apps based on Dagger and RxJava Droidcon UK
5 Favorite Gems (Lightning Talk(
5 Favorite Gems (Lightning Talk(
Quiniela
Quiniela
Say Hello To Ecmascript 5
Say Hello To Ecmascript 5
Graphical User Components Part 1
Graphical User Components Part 1
How do we use hooks
How do we use hooks
Kotlin Generation
Kotlin Generation
Graphical User Interface (GUI) - 2
Graphical User Interface (GUI) - 2
Exercícios Netbeans - Vera Cymbron
Exercícios Netbeans - Vera Cymbron
Scala101, first steps with Scala
Scala101, first steps with Scala
Swiss army knife Spring
Swiss army knife Spring
New text document
New text document
RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017
Refactoring group 1 - chapter 3,4,6
Refactoring group 1 - chapter 3,4,6
Swing
Swing
Intro to Advanced JavaScript
Intro to Advanced JavaScript
Doc Parsers Api Cheatsheet 1 0
Doc Parsers Api Cheatsheet 1 0
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기
Ian 20150116 java script oop
Ian 20150116 java script oop
Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"
Architecting for PHP5 - Why "Runs on PHP5" is not "Written for PHP5"
Destacado
Jenkins入門
Jenkins入門
Kiyotaka Oku
ミニ四駆ジャパンカップで勝つ方法を考える
ミニ四駆ジャパンカップで勝つ方法を考える
Kiyotaka Oku
JUC2012
JUC2012
Kiyotaka Oku
GDK48総選挙の裏側
GDK48総選挙の裏側
Kiyotaka Oku
Spockの基礎
Spockの基礎
Kiyotaka Oku
G * magazine 1
G * magazine 1
Tsuyoshi Yamamoto
javafx-mini4wd
javafx-mini4wd
Kiyotaka Oku
BaseScriptについて
BaseScriptについて
Kiyotaka Oku
Jenkins plugin memo
Jenkins plugin memo
Kiyotaka Oku
Destacado
(9)
Jenkins入門
Jenkins入門
ミニ四駆ジャパンカップで勝つ方法を考える
ミニ四駆ジャパンカップで勝つ方法を考える
JUC2012
JUC2012
GDK48総選挙の裏側
GDK48総選挙の裏側
Spockの基礎
Spockの基礎
G * magazine 1
G * magazine 1
javafx-mini4wd
javafx-mini4wd
BaseScriptについて
BaseScriptについて
Jenkins plugin memo
Jenkins plugin memo
Similar a Griffon不定期便〜G*ワークショップ編〜
JJUG CCC 2011 Spring
JJUG CCC 2011 Spring
Kiyotaka Oku
Groovy-er desktop applications with Griffon
Groovy-er desktop applications with Griffon
Eric Wendelin
Groovy-er Desktop Applications With Griffon
Groovy-er Desktop Applications With Griffon
Matthew McCullough
From Swing to JavaFX
From Swing to JavaFX
Yuichi Sakuraba
Griffon @ Svwjug
Griffon @ Svwjug
Andres Almiray
Write a GUI application to simulate writing out a check. The value o.pdf
Write a GUI application to simulate writing out a check. The value o.pdf
fathimaoptical
In Java Write a GUI application to simulate writing out a check. The.pdf
In Java Write a GUI application to simulate writing out a check. The.pdf
flashfashioncasualwe
662305 11
662305 11
Nitigan Nakjuatong
Action bar
Action bar
Mu Chun Wang
Grails/Groovyによる開発事例紹介
Grails/Groovyによる開発事例紹介
Kiyotaka Oku
T.Y.B.S.CS Advance Java Practicals Sem 5 Mumbai University
T.Y.B.S.CS Advance Java Practicals Sem 5 Mumbai University
Niraj Bharambe
The Ring programming language version 1.7 book - Part 16 of 196
The Ring programming language version 1.7 book - Part 16 of 196
Mahmoud Samir Fayed
The Ring programming language version 1.6 book - Part 15 of 189
The Ring programming language version 1.6 book - Part 15 of 189
Mahmoud Samir Fayed
Registro de venta
Registro de venta
lupe ga
import java.awt.Color;import java.awt.Insets;import java.awt.Con.pdf
import java.awt.Color;import java.awt.Insets;import java.awt.Con.pdf
venkt12345
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
Tsuyoshi Yamamoto
Java: GUI
Java: GUI
Tareq Hasan
culadora cientifica en java
culadora cientifica en java
Jorge Llocclla Rojas
Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradle
Thierry Wasylczenko
Chap1 1.4
Chap1 1.4
Hemo Chella
Similar a Griffon不定期便〜G*ワークショップ編〜
(20)
JJUG CCC 2011 Spring
JJUG CCC 2011 Spring
Groovy-er desktop applications with Griffon
Groovy-er desktop applications with Griffon
Groovy-er Desktop Applications With Griffon
Groovy-er Desktop Applications With Griffon
From Swing to JavaFX
From Swing to JavaFX
Griffon @ Svwjug
Griffon @ Svwjug
Write a GUI application to simulate writing out a check. The value o.pdf
Write a GUI application to simulate writing out a check. The value o.pdf
In Java Write a GUI application to simulate writing out a check. The.pdf
In Java Write a GUI application to simulate writing out a check. The.pdf
662305 11
662305 11
Action bar
Action bar
Grails/Groovyによる開発事例紹介
Grails/Groovyによる開発事例紹介
T.Y.B.S.CS Advance Java Practicals Sem 5 Mumbai University
T.Y.B.S.CS Advance Java Practicals Sem 5 Mumbai University
The Ring programming language version 1.7 book - Part 16 of 196
The Ring programming language version 1.7 book - Part 16 of 196
The Ring programming language version 1.6 book - Part 15 of 189
The Ring programming language version 1.6 book - Part 15 of 189
Registro de venta
Registro de venta
import java.awt.Color;import java.awt.Insets;import java.awt.Con.pdf
import java.awt.Color;import java.awt.Insets;import java.awt.Con.pdf
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
名古屋SGGAE/J勉強会 Grails、Gaelykでハンズオン
Java: GUI
Java: GUI
culadora cientifica en java
culadora cientifica en java
Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradle
Chap1 1.4
Chap1 1.4
Más de Kiyotaka Oku
Osaka Venture Meetup #3
Osaka Venture Meetup #3
Kiyotaka Oku
巨大不明ビルドの継続的統合を目的とするビルドパイプラインを主軸とした作戦要綱
巨大不明ビルドの継続的統合を目的とするビルドパイプラインを主軸とした作戦要綱
Kiyotaka Oku
日本Grails/Groovyユーザーグループ
日本Grails/Groovyユーザーグループ
Kiyotaka Oku
GroovyConsole2
GroovyConsole2
Kiyotaka Oku
GroovyConsole
GroovyConsole
Kiyotaka Oku
Jenkinsプラグインの作り方
Jenkinsプラグインの作り方
Kiyotaka Oku
Devsumi Openjam
Devsumi Openjam
Kiyotaka Oku
Jenkins and Groovy
Jenkins and Groovy
Kiyotaka Oku
とある断片の超動的言語
とある断片の超動的言語
Kiyotaka Oku
Mote Hudson
Mote Hudson
Kiyotaka Oku
Groovy and-hudson2
Groovy and-hudson2
Kiyotaka Oku
Gaelyk
Gaelyk
Kiyotaka Oku
JDO
JDO
Kiyotaka Oku
Grails on GAE/J
Grails on GAE/J
Kiyotaka Oku
Más de Kiyotaka Oku
(14)
Osaka Venture Meetup #3
Osaka Venture Meetup #3
巨大不明ビルドの継続的統合を目的とするビルドパイプラインを主軸とした作戦要綱
巨大不明ビルドの継続的統合を目的とするビルドパイプラインを主軸とした作戦要綱
日本Grails/Groovyユーザーグループ
日本Grails/Groovyユーザーグループ
GroovyConsole2
GroovyConsole2
GroovyConsole
GroovyConsole
Jenkinsプラグインの作り方
Jenkinsプラグインの作り方
Devsumi Openjam
Devsumi Openjam
Jenkins and Groovy
Jenkins and Groovy
とある断片の超動的言語
とある断片の超動的言語
Mote Hudson
Mote Hudson
Groovy and-hudson2
Groovy and-hudson2
Gaelyk
Gaelyk
JDO
JDO
Grails on GAE/J
Grails on GAE/J
Último
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
apidays
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
Product Anonymous
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
apidays
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Zilliz
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Deepika Singh
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Edi Saputra
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Orbitshub
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
Dropbox
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
Remote DBA Services
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
The Digital Insurer
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
Nanddeep Nachan
presentation ICT roal in 21st century education
presentation ICT roal in 21st century education
jfdjdjcjdnsjd
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
ThousandEyes
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
MadyBayot
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
danishmna97
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
johnbeverley2021
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
Sandro Moreira
Último
(20)
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
presentation ICT roal in 21st century education
presentation ICT roal in 21st century education
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
Griffon不定期便〜G*ワークショップ編〜
1.
Griffon
G* 2011 9 23
2.
id:kiy0taka @kiy0taka
JGGUG G*Magazine Griffon Griffon (?) 2011 9 23
3.
create-command-alias
$ griffon create-command-alias hoge > test-app unit: foo.BarTests $ griffon hoge Grails Griffon (ry 2011 9 23
4.
Griffon
Grails 2011 9 23
5.
Java
package sample; contentPane.add(button); import java.awt.Container; setDefaultCloseOperation(EXIT_ON_CLOSE); import java.awt.GridLayout; pack(); import java.awt.event.ActionEvent; setVisible(true); import java.awt.event.ActionListener; } import javax.swing.JButton; public static void main(String[] args) { import javax.swing.JFrame; SwingUtilities.invokeLater(new Runnable() { import javax.swing.JLabel; public void run() { import javax.swing.JTextArea; new Hello(); import javax.swing.SwingUtilities; } }); public class Hello extends JFrame { } } public Hello() { super("Hello"); Container contentPane = getContentPane(); contentPane.setLayout(new GridLayout(3, 1)); JLabel label = new JLabel("Label"); contentPane.add(label); JTextArea textArea = new JTextArea("Text Area"); textArea.setColumns(20); textArea.setRows(2); contentPane.add(textArea); JButton button = new JButton("Button"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { } }); 2011 9 23
6.
Groovy
import groovy.swing.SwingBuilder new SwingBuilder().edt { frame(title:'Hello', show:true, pack:true) { gridLayout(cols:1, rows:3) label 'Label' textArea('Text Area', rows:2, columns:20) button('Button', actionPerformed:{ evt -> ... }) } } 2011 9 23
7.
Java
button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ... } }); SwingUtilities.invokeLater(new Runnable() { public void run() { ... } }); 2011 9 23
8.
&
export GRIFFON_HOME=/path/to/griffon export PATH=$GRIFFON_HOME/bin:$PATH 2011 9 23
9.
griffon
[ ] griffon create-app myApp griffon run-app griffon test-app griffon package 2011 9 23
10.
Grails 2011
9 23
11.
Griffon Wrapper
griffonw / griffonw.bat Griffon gradlew CI 2011 9 23
12.
View 2011
9 23
13.
View
SwingBuilder 2011 9 23
14.
SwingBuilder
groovy.swing.SwingBuilder Groovy javax.swing.JXxx -> xxx() JButton -> button() JLabel -> label() 2011 9 23
15.
View
application(title:'Sample', pack:true, ...) { tableLayout { tr { td { label('User Name') } td { textField(columns:20) } } tr { td { label('Password') } td { passwordField(columns:20) } } tr { td(colspan:2, align:'right') { button('Submit') } } } } 2011 9 23
16.
View
// MyMenuBar.groovy menuBar { menu('File') { menuItem('Open') menuItem('Save') } } // MyAppView.groovy application(...) { build(MyMenuBar) } 2011 9 23
17.
View
Java // MyPanel.java class MyPanel extends JPanel { ... } // MyAppView.groovy application(...) { widget(new MyPanel()) } 2011 9 23
18.
SwingPad 2011
9 23
19.
SwingPad 2011
9 23
20.
View
SwingPad GroovyConsole 2011 9 23
21.
SwingBuilder
View SwingPad 2011 9 23
22.
generate-view-script
NetBeans View Griffon NetBeans Griffon 2011 9 23
23.
Model 2011
9 23
24.
Model
package sample class SampleModel { String username String password } 2011 9 23
25.
View
Model Model View 2011 9 23
26.
Model
package sample import groovy.beans.Bindable class SampleModel { @Bindable String username @Bindable String password } 2011 9 23
27.
Model
package sample import groovy.beans.Bindable @Bindable class SampleModel { String username String password } 2011 9 23
28.
View -> Model
textField(text:bind(target:model, targetProperty:‘username’)) textField(text:bind(target:model, ‘username’)) 2011 9 23
29.
Model -> View
textField(text:bind(source:model, sourceProperty:‘username’)) textField(text:bind(source:model, ‘username’)) textField(text:bind { model.username }) 2011 9 23
30.
View -> View
buttonGroup(id:'group1') radioButton(id:‘radio1’, ‘ ’, buttonGroup:group1) radioButton(id:‘radio2’, ‘ ’, buttonGroup:group1) textField(editable:bind(source:radio1, sourceEvent:‘itemStateChanged’, sourceValue:{radio1.selected})) 2011 9 23
31.
// Model
class Model { Date now = new Date() } // View label(text:bind(‘now’, source:model, converter:{it.format(‘yyyy-MM-dd’)})) 2011 9 23
32.
// Model
class Model { int num } // View textField(text:bind(‘num’, target:model, validator:{ it?.isInteger() })) 2011 9 23
33.
constraints?
class MyModel { @Bindable String requiredText @Bindable String url @Bindable String email static constraints = { requiredText(blank:false) url(url:true) email(email:true) } } 2011 9 23
34.
Validation
Grails constraints Model model.validate() model.errors net.sourceforge.gvalidation.swing.ErrorMessagePanel 2011 9 23
35.
ErrorMessagePanel
// View widget(new ErrorMessagePanel(messageSource), errors: bind(source: model, 'errors')) 2011 9 23
36.
Controller 2011
9 23
37.
Controller
class SampleController { def model def view void mvcGroupInit(Map args) { ... } void mvcGroupDestroy() { ... } def fooAction = { evt -> ... } def barAction = { evt -> ... } } 2011 9 23
38.
View
button(‘Click!’, actionPerformed:controller.fooAction) 2011 9 23
39.
Model View
Controller Model View 2011 9 23
40.
Controller
( < 0.9.2 ) 0.9.2 UI 2011 9 23
41.
@Threading
griffon.transform.Threading 2011 9 23
42.
class MyController {
@Threading(Threading.Policy.INSIDE_UITHREAD_SYNC) def myAction = { } } 2011 9 23
43.
Threading.Policy
OUTSIDE_UITHREAD ( ) INSIDE_UITHREAD_SYNC UI INSIDE_UITHREAD_ASYNC UI SKIP 2011 9 23
44.
class MyController {
def myAction = { // execSync { // UI execOutside { // } } } } 2011 9 23
45.
exec
execSync UI execAsync UI execOutside 2011 9 23
46.
Java/Groovy/Griffon
Java Groovy Griffon new Thread() doOutside execOutside invokeLater doLater execAsync invokeAndWait edt execSync 2011 9 23
47.
MVC
Model View Controller MVC griffon create-mvc myNewGroup 2011 9 23
48.
create-mvc
-skip(View|Model|Controller) View/Model/Controller MVC -fileType=(groovy|java|etc) Java 2011 9 23
49.
createMvcGroup
MVC createMvcGroup(groupType, groupName, args) 2011 9 23
50.
MVC
SplitPane MVC TabbedPane MVC View MVC 2011 9 23
51.
Group1
// View button('Add tab', actionPerformed:controller.addTab) tabbedPane id: 'tabGroup' // Controller def addTab = { def name = new Date().format('yyyy-MM-dd HH:mm:ss') createMVCGroup("tab", name [tabGroup: view.tabGroup, tabName: name]) } 2011 9 23
52.
Group2
// View tabbedPane(tabGroup, selectedIndex:tabGroup.tabCount) { panel(title: tabName) { label(tabName) } } 2011 9 23
53.
Spock + FEST 2011
9 23
54.
Spock + FEST
class CalcSpec extends FestSpec { def 'my first FEST spec'() { when: window.textBox('arg1').enterText(arg1) window.textBox('arg2').enterText(arg2) window.button('calculate').click() then: window.label('result').requireText(result) where: arg1 | arg2 | result '1' | '1' | '2' '1' | '2' | '3' } } 2011 9 23
55.
WebStart/Applet/Jar/Zip
griffon package [webstart|applet|jar|zip] izpack|mac|rpm|deb|jsmooth 2011 9 23
56.
0.9.3
Griffon 0.9.3 2011 9 23
Descargar ahora