jnex Einführung
description
Transcript of jnex Einführung
jnex Einführung
Präsentationsunterlagen für die Softwareentwickler Schulung
Dipl. El. Ing. ETH
Marcel Baumann2003
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
3
jnex EinführungNexirius GmbH
www.nexirius.ch
Model View Controller Design Pattern (MVC)
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
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();
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)
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
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();
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.
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
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){}
}
12
jnex EinführungNexirius GmbH
www.nexirius.ch
Calculator
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
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
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
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
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()
}
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);
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
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;