![Page 1: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/1.jpg)
Desktop Patternsand
Data Binding for Swing
Karsten Lentzsch www.JGoodies.com
![Page 2: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/2.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Presentation Goals
Learn how to organize presentation logic
and how to bind domain data to a Swing UI
![Page 3: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/3.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Speaker Qualifications
Karsten builds elegant Swing apps
works with Objects since 1990
helps others with UI and architectures
provides libraries that complement Swing
provides examples for Swing architectures
writes about Java desktop issues
![Page 4: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/4.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Agenda
Introduction
Separated Presentation & Autonomous View
MVP, MVC and Presentation Model
Synchronizing Single Values
Field Report
![Page 5: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/5.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Swing Building Blocks
JRE / Swing
Panels
Foundation
Basic Libraries
Application Frame
Helper Code/Libs
Validation
Applications
BindingLayout
Application 1
Appearance
Components, Application Management, etc.
Utils Help Printing
Application 2
![Page 6: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/6.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Swing Building Blocks
JRE / Swing
Panels
Foundation
Basic Libraries
Application Frame
Helper Code/Libs
Validation
Applications
BindingLayout
Application 1
Appearance
Components, Application Management, etc.
Utils Help Printing
Application 2
![Page 7: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/7.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Questions
How and where is MVC used in Swing?
How to structure my application?
How to separate models?
How to build a view?
Who should handle events?
Do I need a controller?
![Page 8: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/8.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Strongly Recommended!
1. Use Separated Presentation!
2. Read “Organizing Presentation Logic” in Fowler's “Further P of EAA”
3. Study MVP and Presentation Model
4. Know Observer
5. If appropriate split Autonomous View using MVP or Presentation Model
![Page 9: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/9.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
I - Basics
Separated Presentation & Autonomous View
![Page 10: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/10.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Not this way!
Domain Data
Presentation Logic
Presentation (Views)
Without Separated Presentation
![Page 11: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/11.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Separate Domain from Views
Domain logic contains no GUI code
Presentation handles all UI issues
Advantages:– Each part is easier to understand
– Each part is easier to change
Rule of thumb for domain data: Do I need this class even without a GUI?
![Page 12: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/12.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Separated Presentation
Domain Data
Presentation Logic
Presentation (Views)
Presentation Layer
Domain Layer
![Page 13: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/13.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Loose Coupling
The domain shall not reference the GUI
Presentation refers to domain and can modify it
Advantages:– Reduces complexity
– Allows to build multiple presentations of a single domain object
![Page 14: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/14.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Sep.Presentation with Observer
Domain Data
Presentation Logic
Presentation (Views)
notifies refers to/modifies
![Page 15: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/15.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Autonomous View
Presentation Logic
Presentation (Views)
![Page 16: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/16.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Autonomous View
Often: one Java class per window/frame.
Typically a subclass of JDialog, JFrame, JPanel – which isn't really necessary.
Appropriate pattern for smaller views.
If the views and logic get more complex, it's worth to separate concerns.
![Page 17: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/17.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Autononous View: Details
JDialog
Presentation Logic
Component Configuration
Panel Building Code
![Page 18: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/18.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Tips
Build dialogs, frames, panel; extend them only if necessary.
Compose larger screens from small panels.– in simple cases use build methods like
#buildMainPanel,#buildButtonBar, etc.
– otherwise use panels and nest subpanels.
Consider separating the presentation logic from the presentation.
![Page 19: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/19.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
When to Split Autonomous View?
If you want to test the presentation logic.
If you don't overview the source anymore, for example because it exceeds your outline.
If you share code with colleagues.
If you want to reuse the logic or views.
![Page 20: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/20.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Presentation Logic Separated
Domain Data
Presentation LogicPresentation (Views)
![Page 21: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/21.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Advantages of the Separation I
Makes testing easier (Fowler).
GUI layer becomes quite simple, and is easy to build, to understand, and to maintain.
More team members can work on the GUI.
GUI code can follow syntactical patterns.
Makes it easier to work with visual builders.
![Page 22: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/22.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Advantages of the Separation II
The complex logic is easier to overview.
The separation helps us structure our work.
Simplifies team synchronisation.
Allows to build “forbidden zones”– for team members
– before you ship a new release
![Page 23: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/23.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Disadvantages of the Separation
More work.
Requires to work with a set of related classes instead of a single class.
Typically you benefit from the separation.
![Page 24: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/24.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
II – Splitting Autonomous View
MVP, MVC and Presentation Model
![Page 25: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/25.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Model-View-Presenter (MVP)
Model(Domain data)
Presenter(Presentation logic)
View(Painting code)
reads/modifies
refers to
![Page 26: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/26.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MVP
The View– holds the GUI state, for example
a JTextField with Text and Enablement
The Presenter – reads domain data and copies them to the
components of the views
– handles GUI events and modifies the GUI state in the view
– modifies domain data using GUI data
![Page 27: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/27.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MVP
Domain Data
Presenter
• reads domain data• sets GUI state• handles events• changes the domain
View
reads/modifies
Textfield
Checkbox
Button
Window
builds
![Page 28: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/28.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MVP vs. MVC
Differences and the Swing-MVC-Variant
![Page 29: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/29.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MVC
Model
ControllerView
modifiesnotifies
refers to
![Page 30: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/30.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MVC
Model
ControllerView
modifiesnotifies
refers to
![Page 31: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/31.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MVC with Model Layer
Domain Model
ControllerView Presentation Layer
Domain Layer
GUI Model Model Layer
![Page 32: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/32.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Factoring out the Look&Feel
Swing can change the application's appearance and behavior (look & feel).
Views and Controller are separated from the UI components and are put together as a UI Delegate.
![Page 33: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/33.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
M-JComponent-VC
Controller
View
Swing Model(s)
JComponent
![Page 34: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/34.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MetalCheckBoxUI
Example: JCheckBox
EventHandling
Painting
ToggleButtonModel
JCheckBox
![Page 35: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/35.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MetalCheckBoxUI
JCheckBox: Some Details
EventHandling
Painting
ToggleButtonModel
JCheckBox
Basic-ButtonUI
MouseListener
MouseMotionListener
ChangeListener
PropertyChangeListener
FocusListener
Change-Listener
![Page 36: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/36.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Summary
Swing doesn't use the original MVC
Swing uses an extended form of MVC
Swing shares the motivation behind MVC
Swing adds features to the original MVC
UI delegates are both view and controller
MVC is for components, MVP for applications
![Page 37: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/37.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MVP in Swing
Domain Data
Presenter
Present. logic:on checkbox selection•change text•disable Button
View
JCheckBox
MetalCheckBoxUI
EventHandling
PaintingJTextField
JButton
![Page 38: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/38.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Presentation Model (PM)
Model(Domain Data)
Presentation Model(GUI State + Presentation Logic)
View(Painting Code)
reads/modifies
refers to
![Page 39: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/39.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Presentation Model (PM)
Model(Domain Data)
Presentation Model(GUI State + Presentation Logic)
View(Painting Code)
reads/modifies
refers to
![Page 40: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/40.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Presentation Model
The View – consists only of GUI components
– observes changes in the Presentation Model
The Presentation Model– contains GUI state and presentation logic
– reads domain to update its GUI state
– handles GUI events by changing its GUI state; then reports changes
– modifies domain data using its GUI state
![Page 41: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/41.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Presentation Model
Domain Data
Presentation Model
View
Textfield CheckBox Button
Window
builds
Text Model Check Model Button Model
![Page 42: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/42.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MVP vs. Presentation Model
Presenter refers to the View, PM does not refer (directly) to the View.
In MVP the View holds the GUI state.
The PM holds the GUI state itself.
The Presenter changes GUI state in the View
The PM changes its own GUI state and reports changes to all its View.
![Page 43: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/43.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MVP
Model(Domain Data)
Presenter(Presentation Logic)
View(Painting Code)
reads/modifies
refers to
![Page 44: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/44.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Presentation Model
Model(Domain Data)
Presentation Model(GUI state + Presentation Logic)
View(Painting Code)
reads/modifies
refers to
![Page 45: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/45.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MVP in Swing: GUI State
Domain Data
PresenterView
reads/modifies
JTextField JCheckBox JButton
Document ButtonModel ButtonModel
![Page 46: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/46.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
PM: GUI State
Domain Data
Presentation Model
View
Textfield Checkbox Button
Text Model Check Model Button Model
![Page 47: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/47.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
PM in Swing: GUI State
Domain Data
Presentation Model
View
JTextField JCheckBox JButton
Text Model Check Model Action
Document ButtonModel ButtonModel
![Page 48: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/48.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
MVP vs. Presentation Model
MVP holds the GUI state once.
PM holds it twice, in the View and the PM.
PM requires a synchronisation between the PM state and the View state.
No worries about this synchronisation! The Swing architecture supports this well.
![Page 49: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/49.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Reminder: Swing Actions
JButton
Action•Text•Icon•Enablement•Mnemonic
JMenuItemJButton
![Page 50: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/50.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
PM: Lists, Tables, Trees
Domain Data
Presentation Model
View
JTable JTree JButton
Table Model Tree Model Action
TableModel TreeModel ButtonModel
JList
ListModel
List Model
![Page 51: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/51.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
PM: Lists, Tables, Trees
Domain Data
Presentation Model
View
JTable JTree JButton
ActionTableModel TreeModel
ButtonModel
JList
ListModel
![Page 52: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/52.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Synchronization Example
private void initComponents() {
okButton = new JButton( presentationModel.getOKAction());
albumList = new JList( presentationModel.getAlbumListModel());
...}
![Page 53: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/53.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
PM: Multiple Views I
Domain Data
Presentation Model
Panel with List and Button
JButton
Action
JList
ListModel
Popup Menu
JMenuItem
![Page 54: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/54.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Table with Button
PM: Multiple Views II
Domain Data
Presentation Model
Display List
JTable
Action
JList
ListModel
JButton
TableModelAdapter
![Page 55: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/55.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
PM: List with Selektion
Domain Data
Presentation Model
View
ListSelectionModel
JList
ListModel
![Page 56: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/56.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Three Things Missing
How do we model non-data GUI state, for example Enablement?
How do we synchronize single values for JTextField, JFormattedTextField, JLabel?
How do we synchronize single values between the domain layer and the PMs?
![Page 57: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/57.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
PM Example: Enablement
Domain Data
Presentation Model
View
Text Enablement
JTextField
Text Model
ChangeHandler
![Page 58: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/58.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
IV – Synchronizing Single Values
How to binddomain data to UI components?
![Page 59: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/59.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Binding Tasks
Read and write domain object properties
Get and set GUI model state
Report and handle changes in the domain
Buffer values – delay until OK pressed
Change management – commit required?
Indirection as in an Master-Detail view
Convert types, e. g. Date to String
![Page 60: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/60.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
JCheckBox: Types of State
ToggleButtonModel
JCheckBox
enabledtext, ...
selected
armed pressed, ...
GUI State
Data State
GUI Property
![Page 61: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/61.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
JCheckBox: Binding Task
aToggleButtonModel
aJCheckBox
selected=true Data Model
GUI Component
anAlbumtitle=”Preludes”classical=true
Domain Data
bind/connect, synchronize
![Page 62: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/62.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Copying: Pros and Cons
Easy to understand, easy to explain
Works in almost all situations
Easy to debug – explicit data operations
Blows up the view code
It's difficult to synchronize views
Handles domain changes poorly
![Page 63: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/63.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Concept
Use a universal model (ValueModel)
Convert domain properties to ValueModel
Build converters from ValueModel to Swing models: ToggleButtonModel, etc.
![Page 64: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/64.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
ValueModel and Adapter
aToggleButtonAdapter
aJCheckBox
anAlbumtitle=”Preludes”classical=true
aValueModel
![Page 65: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/65.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
ValueModel: Requirements
We want to get its value
We want to set its value
We want to observe changes
![Page 66: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/66.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
The ValueModel Interface
public interface ValueModel {
Object getValue(); void setValue(Object newValue);
void addChangeListener(ChangeListener l);
void removeChangeListener(ChangeListener l);}
![Page 67: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/67.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Which Event Type?
ChangeEvent reports no new value; must be read from the model – if necessary
PropertyChangeEvent provides the old and new value; both can be null
![Page 68: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/68.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
ValueModel & PropertyAdapter
aToggleButtonAdapter
aJCheckBox
anAlbumtitle=”Preludes”classical=true
ToggleButtonModel
aPropertyAdapterpropertyName=”classical” ValueModel
implements
implements
![Page 69: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/69.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Domain Object Requirements
We want to get and set values
We want to do so in a uniform way
Changes shall be observable
That's what Java Beans provide.
![Page 70: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/70.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
(Bound) Bean Properties
Java Beans have properties, that we can get and set in a uniform way.
Bean properties are bound, if we can observe property changes by means of PropertyChangeListeners.
![Page 71: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/71.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
PropertyAdapter
BeanAdapter and PropertyAdapter convert Bean properties to ValueModel
Observe bound properties
Use Bean Introspection that in turn uses Reflection to get and set bean properties
![Page 72: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/72.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
ValueModel & PropertyAdapter
aToggleButtonAdapter
aJCheckBox
anAlbum (Bean)title=”Preludes”classical=true
aPropertyAdapterpropertyName=”classical” ValueModel
implements
get/set
![Page 73: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/73.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Build a Chain of Adapters
private void initComponents() {
Album album = getEditedAlbum(); ValueModel aValueModel = new PropertyAdapter(album, “classical”);
JCheckBox classicalBox = new JCheckBox(); classicalBox.setModel( new ToggleButtonAdapter(aValueModel));}
![Page 74: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/74.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
ComponentFactory
private void initComponents() {
Album album = getEditedAlbum(); JCheckBox classicalBox = ComponentFactory.createCheckBox( album, Album.PROPERTYNAME_CLASSICAL);}
![Page 75: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/75.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Adapter vs. Connector
aDocumentAdapter
aJTextField
anAlbumtitle=”Preludes”
releaseDate=Dec-5-1967
aPropertyAdapterfor Album#title
aPropertyConnector
aJFormattedTextField
aPropertyAdapterfor Album#releaseDate
![Page 76: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/76.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Indirection
aToggleButtonAdapter
aJCheckBox
anAlbumtitle=”Preludes”classical=true
aPropertyAdapterpropertyName=”classical”
aBeanChannel
aDocumentAdapter
aJTextField
aPropertyAdapterpropertyName=”title”
anAlbumtitle=”Etudes”classical=true
Holds the edited album
![Page 77: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/77.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Indirection
aToggleButtonAdapter
aJCheckBox
anAlbumtitle=”Preludes”classical=true
aPropertyAdapterpropertyName=”classical”
aBeanChannel
aDocumentAdapter
aJTextField
aPropertyAdapterpropertyName=”title”
anAlbumtitle=”Etudes”classical=true
Holds the edited album
![Page 78: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/78.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Example View Source Code
1) Variables for UI components
2) Constructors
3) Create, bind, configure UI components
4) Register GUI state handlers with the model
5) Build and return panel
6) Handlers that update GUI state
![Page 79: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/79.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Example View 1/7
public final class AlbumView {
// Refers to the model provider private AlbumPresentationModel model; // UI components private JTextField titleField; private JCheckBox classicalBox; private JButton buyNowButton; private JList referencesList; ...
![Page 80: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/80.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Example View 2/7
public AlbumView(AlbumPresentationModel m) {
// Store a ref to the presentation model this.model = m;
// Do some custom setup. ...}
![Page 81: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/81.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Example View 3/7
private void initComponents() { titleField = ComponentFactory.createField( model.getTitleModel()); titleField.setEditable(false); buyNowButton = new JButton( model.getBuyNowAction()); referenceList = new JList( model.getReferenceListModel()); referenceList.setSelectionModel( model.getReferenceSelectionModel()); ...
![Page 82: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/82.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Example View 4/7
private initEventHandling(){ // Observe the model to update GUI state model.addPropertyChangeListener( “composerEnabled”, new ComposerEnablementHandler());}
![Page 83: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/83.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Example View 5/7
public JPanel buildPanel() { // Create, bind and configure components initComponents();
// Register handlers that change UI state initEventHandling();
FormLayout layout = new FormLayout( “right:pref, 3dlu, pref”, // 3 columns “p, 3dlu, p”); // 3 rows
...
![Page 84: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/84.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Example View 6/7
PanelBuilder builder = new PanelBuilder(layout); CellConstraints cc = new CellConstraints();
builder.addLabel(“Title”, cc.xy(1, 1)); builder.add(titleField, cc.xy(3, 1)); builder.add(availableBox, cc.xy(3, 3)); builder.add(buyNowButton, cc.xy(3, 5)); builder.add(referenceList, cc.xy(3, 7));
return builder.getPanel();}
![Page 85: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/85.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Example View 7/7
/* Listens to #composerEnabled, changes #enabled of the composerField. */private class ComposerEnablementHandler implements PropertyChangeListener {
public void propertyChange( PropertyChangeEvent evt) {
composerField.setEnabled( model.isComposerEnabled()); }}
![Page 86: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/86.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Simpler Event Handling
private initEventHandling(){ // Synchronize model with GUI state PropertyConnector.connect( model, “composerEnabled”, composerField, “enabled”);}
![Page 87: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/87.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
V - Field Report
How does PM and Adapter Binding work?
![Page 88: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/88.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Design Goals
Works with standard Swing components
Works with custom Swing components
Requires no special components
Requires no special panels
Integrates well with validation
Works with different validation styles
![Page 89: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/89.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Costs
Adapter Binding:– increases learning costs
– decreases production costs a little
– can significantly reduce change costs
![Page 90: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/90.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Use a ComponentFactory!
Encapsulate the creation of adapters from ValueModel to Swing components.
Some components have no appropriate model, e. g. JFormattedTextField
Vends components for ValueModels
![Page 91: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/91.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Tip
Observer/Observable works well between different layers.
Use Observer judiscously in a layer.
![Page 92: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/92.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Warnings
Using Observer in the domain layer makes it more difficult to understand what's going on if a domain property changes.
Be aware of memory leaks, if you observe domain data with listeners that are registered permanently. In this case, the domain data references the GUI.
![Page 93: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/93.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Performance
Adapter chains fire many change events
That seems to be no performance problem
ListModel can improve the performance compared to copying list contents
![Page 94: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/94.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Debugging
Copying approach is easy to debug; you can see when where what happens.
Adapter chains “move“ values implicitly; it's harder to understand updates.
Reflection and Introspection hide who reads and writes values.
Favor named over anonymous listeners.
![Page 95: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/95.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Renaming Methods
Reflection and Introspection make it more difficult to rename bean properties and their getter and setters.
Use constants for bean property names!
Obfuscators fail to detect the call graph.
![Page 96: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/96.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
When is Binding Useful?
I guess that adapter binding can be applied to about 80% of all Swing projects.
However, you need at least one expert who masters the binding classes.
![Page 97: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/97.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Why MVP has been Created
MVP has been created, because many Smalltalk developers have implemented Presentation Models that referred directly to the (single) view.
Swing and Binding help avoid this problem.
![Page 98: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/98.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
State of the JGoodies Binding?
Approach is 10 years old and stable.
Architecture of the Java port is stable.
Tests cover 90% of the classes.
Little documentation.
Tutorial is quite small.
![Page 99: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/99.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
End
Summary and References
![Page 100: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/100.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Summary
Separate the domain from the presentation! That is Separated Presentation.
Separate Autonomous View if appropriate
Choose MVP or Presentation Model
Swing makes Presentation Model easy
PM requires a binding solution
![Page 101: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/101.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
JGoodies Swing Suite
JRE / Swing
Convenience Source Code
Runtime env.
Building blocks
App. framework
Helper code
Validation
Applications
BindingForms
Example 1
Looks
User Interface Framework (UIF)
Example 2 Example n
![Page 102: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/102.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
References I
Fowlers Enterprise Patterns martinfowler.com/eaaDev/
JGoodies Binding binding.dev.java.net
JGoodies Articles www.JGoodies.com/articles/
JGoodies Demos www.JGoodies.com/freeware/
![Page 103: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/103.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
References II
Suns JDNC jdnc.dev.java.net
Oracles JClient and ADF otn.oracle.com/, search 'JClient'
Spring Rich Client Project www.springframework.org/spring-rcp.html
![Page 104: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/104.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
References III
VisualWorks Application Architecture tinyurl.com/yulru
Understanding and Using ValueModels c2.com/ppr/vmodels.html
Model-View-Presenter (MVP) tinyurl.com/33snk
HMVC / Scope tinyurl.com/39q9u, scope.sourceforge.net/
![Page 105: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/105.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Tiny Examples/Tutorial:
JGoodies Binding TutorialData binding problems and solutions
Ships with the JGoodies Binding
![Page 106: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/106.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
Questions & Answers
![Page 107: Desktop Patterns and Data Binding - JDiskReport · Desktop Patterns and Data Binding for Swing ... GUI code can follow syntactical patterns. ... Allows to build “forbidden zones](https://reader031.vdocument.in/reader031/viewer/2022030822/5b376fda7f8b9a40428c5a4a/html5/thumbnails/107.jpg)
:: JGOODIES :: :: JGOODIES :: Java User Interface DesignJava User Interface Design
End
Hope that helps!
Good luck!
Karsten Lentzsch