jgoodies karsten lentzsch efficient swing design swing design.pdf · jgoodies swing libraries...

132
EFFICIENT SWING DESIGN JGoodies Karsten Lentzsch

Upload: others

Post on 22-Sep-2020

17 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

EFFICIENT SWING DESIGN

JGoodies Karsten Lentzsch

Page 2: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

JGoodies

Swing libraries

Visual design

Swing consulting

Talks and articles about Swing

Page 3: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Goals

Get consistent design quickly and easily

Reduce costs

Get better design

Page 4: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Agenda

Introduction

Case studies

TuneQ

IT21

Standard dialogs

Misc

Page 5: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

How long does it take?

Page 6: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Content

Meta design

Non-visual builders

Java layout techniques

Page 7: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Context

Page 8: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 9: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Problems

Layouts without planning

Lack of visual architecture

Difficult to find good design

Inconsistencies

High costs

Poor design

Page 10: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 11: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

How do designers work?

A meta designer plans all layouts

Each designer chooses a layouts:

per page

per section

per article

Higher planning costs

Lower production costs

Page 12: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Examples

Signs

Traffic guidance systems

News paper

Conference material

Architecture

Bus schedule

Page 13: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 14: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 15: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Elements of Meta Design

Fonts

Colors

Sizes

Order

Gaps

Layout

Contrast

Balance

Page 16: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 17: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 18: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Meta Design Principle

As fixed as possible, as flexible as needed!

Retains full flexibility

Focuses on content not design

Page 19: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 20: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 21: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 22: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Naked Objects / JMatter

Ready solution

Free of charge

Automatically creates a UI

Focuses on domain layer

No hand design

consistent UI

UI consistent with domain layer

Page 23: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 24: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 25: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Agenda

Introduction

Case studies

TuneQ

IT21

Standard dialogs

Misc

Page 26: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

TuneQ

Page 27: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 28: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 29: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 30: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 31: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 32: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Meta Design Specification

Structure: Frame, Views, Editors

Fonts

Colors

Gaps

Orientation

UI elements

Multi-plattform

Page 33: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Fonts

Standard font:

for UI controls and display texts

Header font:

for top-level lists and notifications

Category font:

for search result categories

Page 34: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Colors

Header

Background

Header font

Action links

Icons

Maps

Page 35: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Layout

3 main columns

Text

Text, Text

Text, Text, Image

Text, Image, Image

3 main rows

Instance, Product, List

Instance, List

List

Page 36: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 37: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 38: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 39: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 40: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Columns

new FormLayout(

"pref, 6px, pref, 60px, // Text

pref, 6px, pref, 60px, // Text/Image

pref"); // Image

Page 41: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Scalable Layout

new FormLayout(

"pref, 4dlu, pref, 21dlu, // Text

pref, 4dlu, pref, 21dlu, // Text/Image

pref"); // Image

Page 42: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Problem

Instable layout, "jumps"

Difficult to perceive similar content

Page 43: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 44: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 45: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 46: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Minimum width

new FormLayout(

"[80dlu,pref], 4dlu, pref, 21dlu,

[80dlu,pref], 4dlu, pref, 21dlu,

pref");

Page 47: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Layout Variables (Forms 1.2)

new FormLayout(

"[80dlu,pref], $lcgap, pref, 21dlu,

[80dlu,pref], $lcgap, pref, 21dlu,

pref");

Page 48: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Layout Variables

new FormLayout(

"$label, $lcgap, pref, $mgap,

$label, $lcgap, pref, $mgap,

pref");

Page 49: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Variable Definition

LayoutMap map = LayoutMap.getRoot();

map.columnPut("label", "[80dlu,pref]");

map.columnPut("mgap", "21dlu");

map.rowPut ("lcgap", "3dlu");

map.rowPut ("table", "fill:50dlu:grow");

Page 50: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Standard Builder

PanelBuilder builder =

new PanelBuilder(layout);

CellConstraints cc =

new CellConstraints();

builder.addLabel("Label1:", cc.xy(1, 1));

builder.add(content1, cc.xy(3, 1));

builder.addLabel("Label2:", cc.xy(5, 1));

builder.add(content2, cc.xy(7, 1));

Page 51: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Special Builder

ViewBuilder builder =

new ViewBuilder(); // Standard layout

builder.add("Label1:", content1, 1, 1);

builder.add("Label2:", content2, 5, 1);

builder.add("Label1:", content1,

"Label2:", content2,

1, 1);

Page 52: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Bean Builder

ViewBeanBuilder builder =

new ViewBeanBuilder(aBean);

builder.add("Label1:", "property1", 1, 1);

builder.add("Label2:", "property2", 5, 1);

Page 53: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Standard vs. Special Builder

Standard Builder

Seems "dumb"

Blows up sources?

Ready, documented

Maintained, supported

Supported by visual editors

Special Builder

Reduces Code

API design, docs

Maintenance

Training

In 5 years?

Page 54: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 55: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

ButtonBarBuilder

ButtonBarBuilder2 builder =

new ButtonBarBuilder2();

builder.addButton(newButton);

builder.addRelatedGap();

builder.addbutton(editButton);

builder.addUnrelatedGap();

builder.addButton(upAction, downAction);

return builder.getPanel();

Page 56: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

List Types

List only

Buttons

Buttons and search

Buttons, search, filter

Top-level vs. embedded

Page 57: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 58: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 59: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 60: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 61: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 62: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 63: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

ListBuilder (Components)

ListBuilder builder = new ListBuilder();

builder.setListComponent(elementsTable);

builder.setOperationsBar(newEditDeleteBar);

builder.setUpDownBar(upDownBar);

builder.setRefreshComponent(updateBtn);

builder.setSearchComponent(searchField);

builder.setAdditionalComponents(filterBox);

builder.setEmbedded(false);

Page 64: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

ListBuilder (Sub Models)

ListBuilder#setList(

ListModel listModel,

ListSelectionModel selectionModel);

#setOperations(

Action newAction,

Action editAction,

Action deleteAction);

#setUpDown(

Action upAction,

Action downAction);

Page 65: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

ListBuilderModel Interface

ListModel getListModel();

ListSelectionModel getSelectionModel();

void performNew(EventObject e);

String getNewText();

boolean isNewVisible();

void performEdit(EventObject e);

String getEditText();

boolean isEditVisible();

Page 66: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Componenten Factory/-Builder

privat void initComponent() {

zipField = Factory.createZIPField();

buildField = Factory.createDateField();

g1Field = Factory.createWeightField();

hightField = Factory.createLengthField();

zipField = Factory.createZipField(model);

ComponentBuilder builder =

new ComponentBuilder(aBean);

zipField = builder.createZipField("zip");

Page 67: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Problems

Inconsistent tab order

Inconsistent labels/texts

Inconsistent localization

Page 68: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

DEMOInfrastructure Maintenance

Page 69: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 70: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Agenda

Introduction

Case studies

TuneQ

IT21

Standard dialogs

Misc

Page 71: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Oracle Forms

Page 72: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

New Design

Page 73: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

User Perspective

Quicker task completion

Less manual input

Fewer errors

Reduced need for support

Increased data accuracy

More informative

Higher user satisfaction

Improved customer service

Page 74: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Developer Perspective

Many forms (> 300)

Programing model easy to understand

Easy to program

No Swing experts available

No expert knowledge required

Page 75: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Options

Eclipse RCP vs. custom Swing framework

Finished solution (JMatter) vs. custom design

Page 76: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 77: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 78: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 79: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 80: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 81: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 82: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 83: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 84: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 85: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 86: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 87: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 88: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

EditorBuilder

#setHeader(JComponent);

#addTab(String, JComponent);

#setContextActions(Action…);

Page 89: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 90: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 91: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 92: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 93: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 94: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 95: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

HomeViewModel

StringModel getTitleModel();

DetailSearchModel getDetailSearchModel();

QuickSearchModel getQuickSearchModel();

ListModel getListModel();

ListSelectionModel getSelectionModel();

Page 96: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

HomeViewBuilder

HomeViewBuilder(HomeViewModel)

#setAdditionalComponents(JComponent…);

#setPreview(JComponent);

Page 97: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

DEMOField Search, Quick Search

Page 98: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 99: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 100: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Agenda

Introduction

Case studies

TuneQ

IT21

Standard dialog

Misc

Page 101: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 102: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 103: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Template Pattern

public abstract class AbstractDialog {

abstract JComponent buildHeader();

abstract JComponent buildContent();

abstract JComponent buildButtonBar();

public JComponent buildOKCancelBar() {…};

public JComponent buildCloseBar() {…};

Page 104: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 105: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 106: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 107: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Custom Dialog Bean

public class TaskDialog {

void setIcon(Icon icon)

void setMainInstruction(String)

void setContentText(String)

void setCommitButtons(JButton…)

void setVerificationText(String)

void setVerificationSelected(boolean)

void setFootnoteText(String)

Page 108: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Dialog Creation

TaskDialog dialog = new TaskDialog();

dialog.setTitle("Confirm Delete");

dialog.setIconType(TaskDialog.WARNING);

dialog.setMainInstruction("Are you sure…");

dialog.setCommitButtons(

TaskDialog.YES,

TaskDialog.NO);

dialog.setDefaultButton(TaskDialog.NO);

dialog.pack();

dialog.setVisible(true);

Page 109: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

DEMOCreate a Dialog by "Hand"

Page 110: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

DEMODialog Editor

Page 111: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

DEMODialog Browser

Page 112: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Agenda

Introduction

Case studies

TuneQ

IT21

Standard dialogs

Misc

Page 113: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 114: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 115: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 116: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 117: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Class MetaDesign

public abstract class MetaDesign

#setLayout(LayoutManager layout);

#putConstraints(Object key, Object constr);

#putFont(Object key, Font font);

#putColor(Object key, Color color);

Page 118: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

MetaDesign Setup 1/2

public class Login extends MetaDesign {

// Keys

static final Object TITLE = "title";

static final Object CONTENT = "content";

static final Object FOOTER_L = "footerL";

static final Object FOOTER_R = "footerR";

Page 119: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

MetaDesign Setup 2/2

private void init() {

setLayout(new FormLayout("14dlu,…", "…"));

CellConstraints cc = new CellConstraints();

putConstraints(TITLE,

cc.xywh(2, 3, 1, 1, "center","bottom"));

putConstraints(CONTENT,

cc.xywh(3, 5, 1, 1, "center","top"));

Page 120: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

MetaDesign Panel Building

MetaDesignBuilder builder =

new MetaDesignBuilder(new Login());

builder.add(Login.TITLE, titleLabel);

builder.add(Login.CONTENT, content);

builder.add(Login.FOOTER_L, exitButton);

builder.add(Login.FOOTER_R, changeBar);

builder.add(Login.BACKGRND, backgroundPnl);

builder.getPanel();

Page 121: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 122: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing
Page 123: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

What's missing?

How shall I ask this question?

How shall I label the buttons?

When modal? When modeless?

Property or task?

Word list

Design catalog

Style guide

Page 124: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Summary

Layout plan

Meta design

Grid / Grid system

Layout

scales with font and resolution

minimum widths

variables

Page 125: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Summary

ButtonBarBuilder

ListBuilder

ListBuilderModel

Component factory/-builder

HomePanelBuilder

Custom visual beans

MetaDesignBuilder

Page 126: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

References I

Microsoft User Experience Guide (UX Guide)

Mac Aqua Human Interface Guidelines (HIG)

"Designing Visual Interfaces" Kevin Mullet & Darrel Sano

"GUI Bloopers" Jeff Johnson

Page 127: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

References II

"Organizing Presentation Logic" Martin Fowler

"Swing Application Framework" - JSR 296 Hans Muller

Page 128: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

References III

www.jgoodies.com/articles

First Aid for Swing UIs

Desktop Patterns & Data Binding

Layout and Panel Building

JGoodies Forms

Swing Data Validation

Page 129: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

References IV

JGoodies FormLayout, Forms Library, www.jgoodies.com/download/

JMatter, Naked Objects for Swing, www.jmatter.org

Page 130: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

Future

JSR 296 – Swing Application Framework

JSR 295 – Beans Binding

Eclipse RCP

Spring RCP

Visual editors

Java Desktop Blueprints / Style Guide

Page 131: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

QUESTIONS AND ANSWERS

Page 132: JGoodies Karsten Lentzsch EFFICIENT SWING DESIGN swing design.pdf · JGoodies Swing libraries Visual design Swing consulting Talks and articles about Swing

SWING META DESIGN

JGoodies Karsten Lentzsch