jnex Einführung

20
jnex Einführung Präsentationsunterlagen für die Softwareentwickler Schulung Dipl. El. Ing. ETH Marcel Baumann 2003

description

jnex Einführung. Dipl. El. Ing. ETH Marcel Baumann 2003. Präsentationsunterlagen für die Softwareentwickler Schulung. Ziele des Kurses. Erlernen des Umgangs mit den wichtigsten Klassen von jnex Anhand einfacher Beispiele Zusammenhänge verstehen Sinn des Frameworks verstehen - PowerPoint PPT Presentation

Transcript of jnex Einführung

Page 1: jnex Einführung

jnex Einführung

Präsentationsunterlagen für die Softwareentwickler Schulung

Dipl. El. Ing. ETH

Marcel Baumann2003

Page 2: jnex Einführung

2

jnex EinführungNexirius GmbH

www.nexirius.ch

Ziele des Kurses

Erlernen des Umgangs mit den wichtigsten Klassen von jnex

Anhand einfacher Beispiele Zusammenhänge verstehen

Sinn des Frameworks verstehen

Erfolgserlebnisse provozieren

Page 3: jnex Einführung

3

jnex EinführungNexirius GmbH

www.nexirius.ch

Model View Controller Design Pattern (MVC)

Page 4: jnex Einführung

4

jnex EinführungNexirius GmbH

www.nexirius.ch

Model View Controller bei jnex

DataModel

Viewable

SimpleModel ContainerModel

ArrayModelStructModel

DataViewer

StructViewer

SimpleViewer

ArrayViewer

DataModelMethod

ButtonViewer

0..n

1

dataModelChangeValue

setValue

DataModelListener

Page 5: jnex Einführung

5

jnex EinführungNexirius GmbH

www.nexirius.ch

Model View Controller

// create a string model and initialize its value to "Hello World!"DataModel model = new StringModel("Hello World!");

// create a viewer for the model (produces a JLabel by default)DataViewer viewer = factory.createViewer(model, false);

// create an editor for the same model (produces a JTextField by default)DataViewer editor = factory.createViewer(model, true);

// access the Swing JComponentsJComponent viewerComponent = viewer.getJComponent(); JComponent editorComponent = editor.getJComponent();

model.setText(“Test”);

String value = model.getText();

Page 6: jnex Einführung

6

jnex EinführungNexirius GmbH

www.nexirius.ch

Das Management

ViewerMap

ViewerMapEntry

DataModelClass

ViewerCreator

DataLayout

DefaultViewerMap

0..n

ViewerFactory

Erzeugt einen passenden

Editor oder Viewereines DataModel

DataViewer createViewer(DataModel)

Page 7: jnex Einführung

7

jnex EinführungNexirius GmbH

www.nexirius.ch

Properties (Mehrsprachigkeit)

Number=Nr.LastName=NameFirstName=VornameFirstName.tip=einer oder mehrere…Sex=GeschlechtTelephone=TelefonnummerCountry=LandDepartment=AbteilungBirthdate=GeburtstagFile=DateiExit=BeendenCancel=Abbrechen

ABCApplication.properties

Page 8: jnex Einführung

8

jnex EinführungNexirius GmbH

www.nexirius.ch

Hello World!ViewerFactory factory = ViewerFactory.getDefaultInstance("HelloWorld");

DataModel model = new StringModel("Hello World!");DataModelCommand resetCommand = new ResetCommand();

model.appendMethod(resetCommand);

DataViewer viewer = factory.createViewer(model, false);DataViewer editor = factory.createViewer(model, true);DataViewer resetViewer = factory.createViewer(resetCommand, true);

JComponent viewerComponent = viewer.getJComponent(); JComponent editorComponent = editor.getJComponent();JComponent resetComponent = resetViewer.getJComponent();

Page 9: jnex Einführung

9

jnex EinführungNexirius GmbH

www.nexirius.ch

Verschachtelte Datenmodelle (StructModel)

Die Klasse StructModel ist ein Behälter für andere DataModel

Die Methode append(DataModel) fügt ein Member (Kind) in die Struktur ein. Kinder von Strukturen sollten immer einen eindeutigen Feldnamen haben.

Die Kinder können per Feldname (getChild(String FieldName)) angesprochen werden können

Grosskinder können mit getChild(„Kind;Grosskind“) erreicht werden.

Page 10: jnex Einführung

10

jnex EinführungNexirius GmbH

www.nexirius.ch

DataModelListener einrichten

Jedes DataModel sendet DataModelEvents, falls sich sein Wert ändert

Die Events werden in einer verschachtelten Struktur jeweils zum Vater weitergereicht

Es gibt eine vorgefertigte Klasse DataModelAdaptor, die alle Listener Funktionen als leere Methoden enthält

Page 11: jnex Einführung

11

jnex EinführungNexirius GmbH

www.nexirius.ch

public class DataModelAdaptor implements DataModelEditListener{

public void dataModelChangeValue(DataModelEvent event){}

public void dataModelChangeStructure(DataModelEvent event){}

public void dataModelGrabFocus(DataModelEvent event){}

public void dataModelEdit(DataModelEvent event){}

}

Page 12: jnex Einführung

12

jnex EinführungNexirius GmbH

www.nexirius.ch

Calculator

Page 13: jnex Einführung

13

jnex EinführungNexirius GmbH

www.nexirius.ch

Fixe Layout Definition für Strukturen

Eine Struktur wird per default mit einem StructEditor dargestellt. Der StructEditor ist in der Lage, irgend ein StructModel so darzustellen, dass alle Felder des Models erfasst werden können.

Mit einem StructureLayoutItem kann die Position, die Grösse und das Aussehen der einzelnen Mitglieder der Struktur definiert werden.

Ein StructureLayoutItem enthält StructureFieldLayout Einträge, die mit der Methode append(DefaultLayoutItem) eingetragen werden. Jeder Eintrag erwirkt die Darstellung eines Mitglieds (Kind) des StructModel

Page 14: jnex Einführung

14

jnex EinführungNexirius GmbH

www.nexirius.ch

child x, y, w, h

import com.nexirius.framework.layout.*;import com.nexirius.framework.dataviewer.*;

public class CalculatorLayout extends StructureLayoutItem{

public CalculatorLayout(){

append(new StructureFieldLayout(„Operator1", 0, 0, 50, 30, null, null, false, null, null));

append(new StructureFieldLayout(„Operand1", 60, 0, 150, 30, null, null, false, null, null));

append(new StructureFieldLayout(„Operator2", 0, 40, 50, 30, null, null, false, null, null));

append(new StructureFieldLayout(„Operand2", 60, 40, 150, 30, null, null, false, null, null));

//…}

}

Structure Layout Item

Page 15: jnex Einführung

15

jnex EinführungNexirius GmbH

www.nexirius.ch

int width = 300;int height = 150;int woperator = 100;int gap = 5;int woperand = width - 3 * gap - woperator;int hline = (height - 6 * gap) / 5;

int x = gap;int y = gap;

append(new StructureFieldLayout("Reset", x, y, woperator, hline, …));x += woperator + gap;append(new StructureFieldLayout("Operand1", x, y, woperand, hline, …));

x = gap;y += hline + gap;append(new StructureFieldLayout("Operator1", x, y, woperator, hline, …));x += woperator + gap;append(new StructureFieldLayout("Operand2", x, y, woperand, hline, …));

Layout Positionen und Grössen berechnen

Page 16: jnex Einführung

16

jnex EinführungNexirius GmbH

www.nexirius.ch

Application

Eine Applikation besteht aus einem JFrame Fenster In diesem Fenster gibt es am oberen Rand ein Pulldown Menü und

gleich darunter ein Toolbar (Symbolleiste). In der Mitte befindet sich der applikationsspezifische Hauptbereich (Main Panel) und am unteren Rand befindet sich eine Statuszeile

Pulldown Menü

Toolbar

Main Panel

Status Line

Page 17: jnex Einführung

17

jnex EinführungNexirius GmbH

www.nexirius.ch

Hello World Application

Definition der Methoden

public HelloWorldApplication(String argv[]) {super(argv);

}public DataModel getApplicationModel() {

return mainModel;}public String getApplicationName() {

return "HelloWorldApplication";}public void preInit() {

//prepare main model}public void init() {

// create JComponents in main panel // use -> getMainPanel()// use -> getFactory()

}

Page 18: jnex Einführung

18

jnex EinführungNexirius GmbH

www.nexirius.ch

Viewer Creator Map

Die ViewerCreatorMap verknüpft Datenmodelle mit ViewerCreator und mit DefaultLayoutItem Instanzen.

Es gibt immer die Möglichkeit für ein Model einen ViewerCreator, der Editoren erzeugt und einen ViewerCreator, der Viewer erzeugt zu registrieren. Das gleiche gilt für das zugeordnete Layout.

Die vordefinierten Modelltypen sind bereits mit ViewerCreator Instanzen verknüpft!

ViewerCreatorMap map = getFactory().getViewerCreatorMap();

map.register(MainModel.class, new MainLayout(), true);map.register(MemberModel.class, new TabbedEditorCreator());map.register(MemberModel.class, new MemberLayout(), true);map.register(PersonModel.class, new PersonLayout(), true);map.register(AddressModel.class, new AddressEditorLayout(), true);map.register(AddressModel.class, new AddressViewerLayout(), false);

Page 19: jnex Einführung

19

jnex EinführungNexirius GmbH

www.nexirius.ch

Array Model

Ein ArrayModel besteht aus einer beliebigen Anzahl Einträgen, wobei die Einträge vom gleichen Typ sind und per Index angesprochen werden.

Ein ArrayModel wirft ein Value Change Event, wenn sich seine Dimension ändert.

Ein ArrayModel wird per default als Tabelle dargestellt

Page 20: jnex Einführung

20

jnex EinführungNexirius GmbH

www.nexirius.ch

Der Ablauf eines Popup Fensters

DataModel original; DataModel kopie;

kopie = original.duplicate();

createViewer(kopie);

original.dropData(copy.dragData());return true;

return false;