Mittwoch, 31. Dezember 2008

Kurs Englisch ohne Mühe

Die letzten Wochen und Monate habe ich in Zusammenarbeit mit dem Verlag ASSIMIL GmbH und dem Arbeitskreis für Information - AKI RP/Eifel ein Sprachmodul progammiert, über das Sie online Sprachen lernen könnnen.


Technisch handelt es sich um eine RIA (Rich Internet Application) auf Basis von PHP, MySQL, DHTML, AJAX sowie den AJAX-Frameworks Dojo Toolkit und Prototype. Daneben kommen noch Flash und Java zur Unterstützung von Multimediaeffekten zum Einsatz.


Das Modul stellt einmal Texte in Englisch und Deutsch dar, spielt die englischen Sätze als Tondateien ab, beinhaltet ein kleines Tonstudio, um eigene Sprachübungen aufzunehmen und bietet verschiedene Übungstechniken zum Vertiefen der erlernten Sprachkenntnisse.


Als Verwaltungsplattform verwenden wir ILIAS, eine leistungsstarke, web-basierte Lernplattform für E-Learning in einem integrierten System (Persönlicher Schreibtisch, Kursmanagement, Gruppensystem, Magazin mit Rollen-basiertem Zugriff, ...).

Mein Sprachmodul wird nach einer Anmeldung als HTML-Lernmodul in einem eigenen Browserfenster zur Verfügung gestellt.


Der Kurs Englisch ohne Mühe (als auch die geplanten Kurse für andere Sprachen) präsentiert einem Lernenden die Sprache so, wie man ihr im täglichen Leben begegnet (die so genannt Assimilmethode). Durch den lebendigen Kontext werden sich Lernende sehr schnell wohlfühlen. Die Assimilmethode bietet eine natürliche Progession: Lassen Sie sich leiten, und Sie werden sehr bequem Ihr Ziel erreichen. Dieser konkrete erste Kurs richtet sich sowohl an Personen, für die das Englische noch eine völlig unbekannte Sprache ist, als auch an Personen, die bereits über ein wenig Englischkenntnisse verfügen und diese gerne auffrischen möchten. Es vermittelt in 110 Lektionen modernes und lebensnahes Englisch. Insgesamt umfasst der Wortschatz, den Sie in diesem Kurs erlernen, ca. 3000 Vokabeln.


Für einen kurzen Zeitraum können Sie das Modul kostenlos testen

Montag, 29. Dezember 2008

Neue Umstiegsanleitung für JavaFX Script

Wie schon versprochen hab ich die Umstiegsanleitung von altem JavaFX-Code auf die Finalversion überarbeitet. Hier ist die angepasste Umstiegsanleitung.

Wer bereits mit JavaFX Script auf Basis erster Preversionen seit etwa Mitte 2007 programmiert hat, wird in der nun Ende 2008 erschienenen Finalversion 1.0 mit einigen Änderungen bzw. Umstrukturierungen konfrontiert.


Etwas bedauerlich ist, dass die Umstrukturierungen über die zweite Hälfte des Jahres 2008 in mehreren Schritten vollzogen wurde und immer wieder Syntaxstrukturen verändert wurden. Insbesondere wurden auch viele Token und Syntaxstrukturen, die in ersten Versionen verwendet wurden, in der Finalversion aufgegeben. Insgesamt ist m.E. die Finalversion von JavaFX Script aber viel stringenter und logischer als die Preversionen geworden und orientiert sich doch verstärkter an dem streng objektorientierten Konzept von Java selbst. Allerdings sind auch durchaus syntaktische Anleihen aus anderen Sprachen wie C/C++/C# oder PHP und JavaScript erkennbar.

 


Hier gibt es die Umstiegsanleitung für JavaFX Script auf die Finalversion 1.0 als PDF zum Download

 

Operationen

In den Preversionen von JavaFX Script hat Sun mit Prozeduren experimentiert. Schon Funktionen sind in der streng objektorientierten Welt von Java gewagt, aber Prozeduren, die sogar einen Rückgabewert liefern konnten, waren wohl doch des Guten zu viel. In der Finalversion entfallen diese Prozeduren, die bisher mit dem Schlüsselwort operation eingeleitet wurden.

Ein Umstieg von altem Code ist jedoch denkbar einfach. Stattdessen werden einfach grundsätzlich Funktionen verwendet, die mit dem Schlüsselwort function eingeleitet werden. Man muss dabei also nur konsequent den Token operation durch den Token function ersetzen. Das ist alles.


Ein Beispiel für die alte Syntax:


class MeineKlasse {

function times2(x) { return x * 2; }

operation print(s) { System.out.println(s); }

}


Das gleiche Beispiel in der neuen Syntax:


class MeineKlasse {

function times2(x) { return x * 2; }

function print(s) { System.out.println(s); }

}


Eine Funktion kann auch explizit mit Void gekennzeichnet werden um zu kennzeichnen, dass eine Funktion keinen Rückgabewert liefert.


Beispiel:


function ausgabe() : Void {

println("Keine Rückgabe!");

}


 

Attributinitialisierung

Die Initialisierung von Attributen erfolgte bisher außerhalb einer Klassendefinition. Diese Technik wurde nun Java angeglichen und die Attribute werden bei der Deklarierung in der Klasse selbst initialisiert.


Ein Beispiel für die alte Syntax:

class MeineKlasse {

attribute bar: Boolean; }

 

attribute Foo.bar = true;


Das gleiche Beispiel in der neuen Syntax:

class MeineKlasse {

var bar: Boolean = true;

}


Beachten Sie, dass nun auch der Token attribute entfällt und stattdessen var (oder def beim Einsatz von dynamischem Binden) zum Einsatz kommt.


 

Ersetzen von Triggern

Bisher waren Trigger, die außerhalb von einer Klasse definiert wurden, ein zentraler Bestandteil der Definition von der Reaktion auf Ereignisse. Die neue Syntax definiert so genannte replace triggers als Teil der Attributdeklaration. Die Trigger-Funktion folgt dabei nun den Schlüsselworten on replace.


Ein Beispiel für die alte Syntax:


class MeineKlasse {

attribute bar: Boolean;

}

 

trigger on MeineKlasse.bar = value {

if (bar == true) {

beep();

}

}


Das gleiche Beispiel in der neuen Syntax:


class MeineKlasse {

var bar: Boolean on replace {

if (bar == true) { beep();

}

};

}


Ein Beispiel für die alte Syntax mit Initialisierung:


class MeineKlasse {

attribute bar: Boolean = true;

}

 

trigger on MeineKlasse.bar = value {

if (bar == true) {

beep();

}

}


Das gleiche Beispiel in der neuen Syntax mit Initialisierung:


class MeineKlasse {

var bar: Boolean = true on replace {

if (bar == true) {

beep();

}

};

}


 

Kardinalität

Die beliebige Häufigkeit von Attributen wurde bisher mit dem Sternoperator * angegeben und die Werte außerhalb zugewiesen. Nun werden dafür die eckigen Klammern [] verwendet und die Werte direkt in der Klasse zugewiesen.


Ein Beispiel für die alte Syntax:


class MeineKlasse {

attribute names :String*;

}

 

attribute names = ["Ralph", "Felix", "Florian"];


Das gleiche Beispiel in der neuen Syntax:


class MeineKlasse {

var names :String[] = ["Ralph", "Felix", "Florian"];

}


 

Benannte Instanzen

In den bisherigen Versionen von JavaFX Script waren benannten Instanzen mehr oder weniger das, was nun vollqualifizierte Konstanten darstellen (oder Objektliterale).


Ein Beispiel für die alte Syntax:


Frame {

title: "White Frame"

background: white

}


Ein vergleichbares Beispiel in der neuen Syntax:


SwingLabel {

text: "Label"

foreground:Color.WHITE

}


Alternativ das gleiche Beispiel in der neuen Syntax:


SwingLabel {

text: "Label"

foreground:Color {

red: 1

green: 1

blue: 1

opacity: 1

}

}


 

Anonyme Objektliterale

Bisher konnten Sie ein anonymes Objektliteral ohne die Spezifizierung von einen Typ deklarieren . Der Interpreter legte den Typ implizit fest (eine Art der losen Typisierung, wie es auch unter JavaScript oder PHP Einsatz findet, unter Java allerdings ziemlich brutal im Widerspruch zum streng typisierten Konzept stand). In der neuen Version müssen Sie explizit Objektliterale benennen.


Ein Beispiel für die alte Syntax:


accelerator: {

modifier: CTRL

keyStroke: O

}

....


Das gleiche Beispiel in der neuen Syntax:


accelerator: Accelerator {

modifier: KeyModifier.CTRL

keyStroke: KeyStroke.O

}

...


 

Überschreiben von Funktionen nun mit expliziter Angabe des Rückgabetyps und override

Bisher konnten Sie beim Überschreiben von einer Funktion diese einfach redefinieren und zum Beispiel auf die Angabe des Rückgabetyps verzichten.

Nun geben Sie in der Signatur der Funktion diesen Rückgabetyp und das vorangestellte Schlüsselwort override an. Zwar ist so eine vollständige Signatur nicht in jedem Fall unbedingt zwingend, aber zur Kennzeichnung und Vereinheitlichung immer sinnvoll.


Ein Beispiel für die alte Syntax:


class MyWidget extends CompositeNode {

...

function composeNode() {

...

}

}


Ein vergleichbares Beispiel in der neuen Syntax:


class MyCustomNode extends CustomNode {


public override function create(): Node {

return Group {

content: []

};

}

}


 

for-Schleife

Nachdem man in Java selbst ein foreach-Konstrukt eingeführt, aber syntaktisch anders als in JavaFX Script aufgebaut hat, war diese syntaktische Abweichung in JavaFX Script ziemlich unglücklich. In der neuen Varianten wurde die Syntax an Java angepasst.


Ein Beispiel für die alte Syntax:


...

for (Integer i = 0; i < element.length; i++) {

 

System.out.println(element);

}

...

foreach (element in group) {

System.out.println(element);

}

...


Das gleiche Beispiel in der neuen Syntax:


...

for (Integer i = 0; i < element.length; i++) {

System.out.println({element});

}

...

for (element in group where element.length() < 4) {

System.out.println({element});

}

...


Negative Rangebereiche und Schrittweite

Bisher ging so was:

for (i in [5..4]) {

System.out.println("i = {i}");

}



In der neuen Version sind negative Rangebereiche nicht mehr erlaubt.



Ebenso können Sie die Schrittweite der Iteration nicht mehr wie folgt angeben:

for (i in [1,5..10]) {

System.out.println("i = {i}");

}



Stattdessen verwendet man nun den Token step, der so auch normal in Arrays zu verwenden ist.



Beispiel:



var nums = [1..10 step 2];


 

Stringliterale und Stringausdrücke in JavaFX

Sie können in JavaFX Script eine Zeichenkette sowohl in einfache als auch doppelte Hochkommata einschließen. Und wie auch beispielsweise in PHP wurden Zeichenketten in den ersten Versionen von JavaFX Script in doppelten und einfachen Hochkommata vom System bei gewissen Situationen unterschiedlich behandelt.

Auswertung von Ausdrücken in Strings

Allgemein gilt - wenn Sie den Bezeichner einer Variablen in eine Zeichenkette mit doppelten Hochkommata notieren und diesen in geschweifte Klammern {} einschließen, wird der Ausdruck ausgewertet. Sie erhalten in dem resultierenden String den Wert der eingeschlossenen Variablen beziehungsweise eines Ausdrucks. Dabei sind Sie für die Art der ausgewerteten Variable nicht auf Zeichenketten beschränkt. Bei einer Zeichenkette in einfachen Hochkommata finden Sie in bisherigen Versionen dieses Verhalten nicht .


Beispiel:

import java.lang.System;

var name = 'Trillian';

var wert = 5;

var s1 = "Hallo {name}"; // Zeichenkette mit doppelten Hochkommata

var s2 = 'Hallo {name}'; // Zeichenkette mit einfachen Hochkommata

var s3 = "Hallo {wert}"; // Zeichenkette mit doppelten Hochkommata


System.out.println(s1); // Hallo Trillian

System.out.println(s2); // Hallo {name}

System.out.println(s3); // Hallo 5


Die Ausgabe ist in alten Versionen folgende:


Hallo Trillian

Hallo {name}

Hallo 5


In neuen Versionen erhalten Sie aber folgende Ausgabe:


Hallo Trillian

Hallo Trillian

Hallo 5


M.a.W.: Auch in einfachen Hochkommata eingeschlossene Ausdrücke werden in der neuen Version von JavaFX Script ausgewertet!


Zeilenumbrüche in Strings

Im Gegensatz zu Java konnten in JavaFX in den ersten Versionen Zeichenketten Zeilenumbrüche enthalten, wenn sie in doppelte Hochkommata eingeschlossen sind. Das geht nun nicht mehr.


 

Modulooperator

Der Modulooperator % wurde in neuen JavaFX-Versionen durch den Token mod ersetzt. Damit ist allerdings eine weitere Inkompatibilität zu Java zu beachten.


 

Arrays

In JavaFX ist [] ein eigener Operator und dieser Operator [] steht für eine Selektion. Die darin notierte Lokalisierung ist eine Verwendung, die ähnlich in XPath beziehungsweise XQuery vorkommt.

Einfügen von Arrayelementen

Das Einfügen von Elementen erfolgt über die insert-Anweisung. Diese Anweisung konnte bisher die folgenden verschiedene Formen annehmen:

  • insert Ausdruck1 [as first | as last] into Ausdruck2

  • insert Ausdruck1 before Ausdruck2

  • insert Ausdruck1 after Ausdruck2


Die Token as first und as last wurden aufgegeben!


 

Die Grundlagen einer GUI mit JavaFX Script

Die grundlegenden Klassen zum Aufbau einer GUI wurden in der Finalversion von JavaFX Script massiv unstrukturiert, ohne jedoch das grundsätzliche Konzept zu verändern. Die Basis bilden nur neue Klassen.


Unter javafx.ext.swing sind nun die meisten Swing-Komponenten zu finden.


Und die Grundlage der gesamten grafischen Applikation bildet javafx.stage.Stage, was für das gesamte Fenster steht.


Dieses wird in der Regel in einzelne Szenen (javafx.scene.Scene) mit spezifischen Inhalten (also etwa Swing-Komponenten) unterteilt werden.


Beispiel:


import javafx.ext.swing.SwingButton;

import javafx.scene.Scene;

import javafx.stage.Stage;


var button = SwingButton {

text: "Button"

action: function() {

java.lang.System.exit(0);

}


}

Stage {

title: "Meine Applikation"

width: 250

height: 80

scene: Scene {

content: button

}

}


 

Bidirektionales Binden - with inverse

Das bidirektionales Binden verwendet in der neuen Variante von JavaFX die Syntax with inverse.


Ein Beispiel für die alte Syntax:


... TextField {

value: bind model.firstName

}

...


Ein vergleichbares Beispiel in der neuen Syntax:

...

SwingTextField {

columns: 10

text: bind model.firstName with inverse

editable: true

}

...


 

Casting von Number nach Integer

Bei der Typumwandlung von Number nach Integer verwendet man in neuen JavaFX-Varianten die Funktion intValue(), um einem Verlust der Genauigkeit vorzubeugen.


Ein Beispiel für die alte Syntax:


var real :Number;

num = 6.42;

var integer :Integer;

integer = real;

...


Das gleiche Beispiel in der neuen Syntax:


var real :Number;

var num = 6.42;

var integer :Integer = real.intValue();

...


 

Vererbung

Bei der Vererbung gibt es in JavaFX Script aktuell ein paar kleinere Probleme, so dass das Schlüsselwort as in einigen Situationen notwendig sein kann.


Beispiel:


...

content: foo as Node

...

 


Das neue API

Das API von JavaFX Script wurde wie schon erwähnt in einigen Bereichen reorganisiert. Insbesondere zur GUI. Details lassen sich aber leicht über die JavaFX Script Programming Language API Documentation unter http://java.sun.com/javafx/1/docs/api/ nachschlagen.


 

 

 

 
Hier gibt es die Umstiegsanleitung für JavaFX Script auf die Finalversion 1.0 als PDF zum Download


Und wie gesagt - in meiner Seite zu JavaFX - http://www.javafx-buch.de gibt es weitere Infos zu JavaFX.

Freitag, 26. Dezember 2008

Ein kleines JavaFX-Beispiel


Aktuell bringe ich meine JavaFX-Kenntnisse auf den neusten Stand. Hat sich ja doch was getan seit meinem Buch. Aber es gibt gutes Material von Sun selbst und die Grundlagen, die ich in meinem Buch ausgearbeitet habe, gelten noch immer.
Hier ist ein nettes kleines Beispiel, was ein offizielles Sun-Beispiel etwas modifiziert.
So sieht es aus

Drehender Text



/*
* Main.fx
*
* Created on 26.12.2008, 21:49:01
*/

package javafxapplication4;

import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.scene.effect.*;
import javafx.scene.paint.*;
import javafx.scene.Scene;
import javafx.scene.shape.Circle;
import javafx.scene.text.*;
import javafx.scene.transform.*;
import javafx.stage.Stage;

var scale = 1.0;
var color = Color.AQUA;
Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames: [
KeyFrame {
time: 3s
canSkip: true
values: [
scale => -1.0 tween Interpolator.EASEBOTH
color => Color.GREEN
]
}
]
}.play();
Stage {
title: "Animierter Text als JavaFX-Applikation"
width: 400
height: 240
scene: Scene {
width: 400
height: 200
content: [
Circle {
centerX: 200,
centerY: 100
radius: 90
fill: RadialGradient {
centerX: 75
centerY: 75
radius: 90
proportional: false
stops: [
Stop {
offset: 0.0
color: Color.RED},
Stop {
offset: 1.0
color: Color.DARKRED}
] // stops

} // RadialGradient
}
Text {
font: Font {
size: 20
}
x: 110,
y: 90
textAlignment: TextAlignment.CENTER
content:"Willkommen bei\nRJS EDV-KnowHow\nwww.rjs.de"
fill: bind color
effect: DropShadow {
offsetX: 10
offsetY:10
color: Color.color(0.1, 0.3, 0.1)
}; // DropShadow
transforms: Scale{
x: 1
y: bind scale
pivotX: 100,
pivotY: 100
} // Scale
} //Text
]
}
}

Mittwoch, 17. Dezember 2008

Nochmal JavaFX

Ich fasse es nicht. Seit ich die Umstiegsanleitung von altem JavaFX-Code auf die Finalversion erstellt habe (was nur wenige Wochen her ist), hat sich das API schon wieder in weiten Bereichen geändert. Selbst der Link zu der Quelle, auf die ich mich bei der Umstiegsamleitung beziehe, ist nicht mehr da. Muss also schleunigst die Anleitung updaten. JavaFX hat sich in den letzten Wochen wirklich immer wieder verändert und ich wollte mich eigentlich erst dann wieder ernsthaft damit beschäftigen, wenn Ruhe eingekehrt und das API stabil ist. Ich hoffe mal, das ist jetzt der Fall. Die nächsten Tage folgt also eine angepasste Umstiegsanleitung.

Mittwoch, 10. Dezember 2008

XML mit Java

Ab heute steht mal wieder eine Schulung zum Thema XML mit Java an. Geht bis zum Ende der Woche.

Samstag, 6. Dezember 2008

Umstiegsanleitung für JavaFX Script auf die Finalversion 1.0

Nachdem ich schon mehrfach Details zum Umstieg von älterem Code in JavaFX Script gepostet habe, folgt hier nochmal ein vollständiger Umstiegsanleitung für JavaFX Script auf die Finalversion 1.0.

Mein Buch zu JavaFX
Meine DVD mit dem Onlinetraining zu JavaFX.
Wer bereits mit JavaFX Script auf Basis erster Preversionen seit etwa Mitte 2007 programmiert hat, wird in der nun Ende 2008 erschienenen Finalversion 1.0 mit einigen Änderungen bzw. Umstrukturierungen konfrontiert.
Aber die Änderungen sind eigentlich gar nicht so wild. Insbesondere gibt es einen guten JavaFX Script™ Programming Language Migration Guide unter https://openjfx.dev.java.net/migration.html, auf dem auch diese Umstiegsanleitung in einigen Punkten basiert.
Insgesamt ist m.E. die Finalversion von JavaFX Script stringenter und logischer geworden und orientiert sich doch verstärkter an dem streng objektorientierten Konzept von Java selbst.
Operationen
In den Preversionen von JavaFX Script hat Sun mit Prozeduren experimentiert. Schon Funktionen sind in der streng objektorientierten Welt von Java gewagt, aber Prozeduren, die sogar einen Rückgabewert liefern konnten, waren wohl doch des Guten zu viel. In der Finalversion entfallen diese Prozeduren, die bisher mit dem Schlüsselwort operation eingeleitet wurden. Stattdessen werden grundsätzlich Funktionen verwendet, die mit dem Schlüsselwort function eingeleitet werden.
Beispiel alt:
class MeineKlasse {
function times2(x) { return x * 2; }
operation print(s) { System.out.println(s); }
}

Beispiel neu:
class MeineKlasse {
function times2(x) { return x * 2; }
function print(s) { System.out.println(s); }
}

Attributinitialisierung
Die Initialisierung von Attributen erfolgte bisher außerhalb einer Klassendefinition. Diese Technik wurde nun Java angeglichen und die Attribute werden bei der Deklarierung in der Klasse selbst initialisiert.
Beispiel alt:
class MeineKlasse {
attribute bar: Boolean; }

attribute Foo.bar = true;

Beispiel neu:
class MeineKlasse {
attribute bar: Boolean = true;
}

Ersetzen von Triggern
Bisher waren Trigger, die außerhalb von einer Klasse definiert wurden, ein zentraler Bestandteil der Definition von der Reaktion auf Ereignisse. Die neue Syntax definiert so genannte replace triggers als Teil der Attributdeklaration. Die Trigger-Funktion folgt dabei nun den Schlüsselworten on replace.
Beispiel alt:
class MeineKlasse {
attribute bar: Boolean;
}

trigger on MeineKlasse.bar = value {
if (bar == true) {
beep();
}
}

Beispiel neu:
class MeineKlasse {
attribute bar: Boolean on replace {
if (bar == true) { beep();
}
};
}

Beispiel alt mit Initialisierung:
class MeineKlasse {

attribute bar: Boolean = true;
}

trigger on MeineKlasse.bar = value {
if (bar == true) {
beep();
}
}

Beispiel neu mit Initialisierung:
class MeineKlasse {
attribute bar: Boolean = true on replace {
if (bar == true) {
beep();
}
};
}
Kardinalität
Die beliebige Häufigkeit von Attributen wurde bisher mit dem Sternoperator * angegeben und die Werte außerhalb zugewiesen. Nun werden dafür die eckigen Klammern [] verwendet und die Werte direkt in der Klasse zugewiesen.
Beispiel alt:
class MeineKlasse {
attribute names :String*;
}

attribute names = ["Ralph", "Felix", "Florian"];

Beispiel neu:
class MeineKlasse {
attribute names :String[] = ["Ralph", "Felix", "Florian"];
}
Objektliterale ohne Attribute
Zur Referenzierung von Objektliteralen ohne dessen Attribute konnte man bisher einfach den Klassennamen angeben. In der neuen Syntax werden geschweifte Klammern gefordert.
Beispiel alt:
Frame {
title: "Show MenuSeparator"
height: 180
width: 320
menubar: MenuBar {
menus: Menu {
text: "File"
items: [MenuItem {
text: "New"

}, MenuItem {
text: "Open"

}, MenuItem {
text: "Save"

}, MenuSeparator, MenuItem {
text: "Import"
}]
}
}
visible: true
}

Beispiel neu:
Frame {
title: "Show MenuSeparator"
height: 180
width: 320
menubar: MenuBar {
menus: Menu {
text: "File"
items: [MenuItem {
text: "New"

}, MenuItem {
text: "Open"

}, MenuItem {
text: "Save"

}, MenuSeparator {

}, MenuItem {
text: "Import"
}]
}
}
visible: true
}
Benannte Instanzen
In den bisherigen Versionen von JavaFX Script waren benannten Instanzen mehr oder weniger das, was nun vollqualifizierte Konstanten darstellen (oder Objektliterale).
Beispiel alt:
Frame {
title: "White Frame"
background: white
}

Beispiel neu:
Frame {
title: "White Frame"
background: Color.WHITE
}

Alternatives Beispiel neu:
Frame {
title: "White Frame"
background: Color {
red: 1
green: 1
blue: 1
opacity: 1
}
}
Anonyme Objektliterale
Bisher konnten Sie ein anonymes Objektliteral ohne die Spezifizierung von einen Typ deklarieren . Der Interpreter legte den Typ implizit fest (eine Art der losen Typisierung, wie es auch unter JavaScript oder PHP Einsatz findet, unter Java allerdings ziemlich brutal im Widerspruch zum streng typisierten Konzept stand). In der neuen Version müssen Sie explizit Objektliterale benennen.
Conversion:
Beispiel alt:
accelerator: {
modifier: CTRL
keyStroke: O
}
....

Beispiel neu:
accelerator: Accelerator {
modifier: KeyModifier.CTRL
keyStroke: KeyStroke.O
}
...
Überschreiben von Funktionen nun mit expliziter Angabe des Rückgabetyps
Bisher konnten Sie beim Überschreiben von einer Funktion auf die Angabe des Rückgabetyps verzichten. Nun muss die Signatur der Funktion diesen Rückgabetyp spezifizieren.
Beispiel alt:
class MyWidget extends CompositeNode {
...
function composeNode() {
...
}
}

Beispiel neu:
class MyWidget extends CompositeNode {
...
function composeNode() :Node {
...
}
}

Bidirektionales Binden - with inverse
Das bidirektionales Binden verwendet in der neuen Variante die Syntax with inverse.
Beispiel alt:
... TextField {
value: bind model.firstName
}
...

Beispiel neu:
...
TextField {
value: bind model.firstName with inverse
}
...
Casting von Number nach Integer
Bei der Typumwandlung von Number nach Integer verwendet man in der neuen JavaFX-Variante die Funktion intValue(), um einem Verlust der Genauigkeit vorzubeugen
Beispiel alt:
... var real :Number;
num = 6.42;
var integer :Integer;
integer = real;
...

Beispiel neu:
... var real :Number;
num = 6.42;
var integer :Integer = real.intValue();
...
Vererbung
Bei der Vererbung gibt es in JavaFX Script aktuell ein paar kleinere Probleme, so dass das Schlüsselwort as in einigen Situationen notwendig wird.
Beispiel alt:
class MeineKlasse extends Rectangle {
...
}
...
...
content: Canvas {
content: Foo {
...
}
...
}
...
}

Beispiel neu:
class MeineKlasse extends Rectangle {
...
Old:}
var foo :Foo = Foo {
...
};
...
content: Canvas {
content: foo as Node
...
}
...
}
for-Schleife
Nachdem man in Java selbst ein foreach-Konstrukt eingeführt, aber syntaktisch anders aufgebaut hat, war die syntaktische Abweichung in JavaFX Script ziemlich unglücklich. In der neuen Varianten wurde die Syntax an Java angepasst.
Beispiel alt:
...
for (Integer i = 0; i < element.length; i++) {

System.out.println(element);
}
...
foreach (element in group) {
System.out.println(element);
}
...

Beispiel neu:
...
for (Integer i = 0; i < element.length; i++) {
System.out.println({element});
}
...
for (element in group where element.length() < 4) {
System.out.println({element});
}
...
Das neue API
Das API von JavaFX Script wurde in einigen Bereich reorganisiert. Insbesondere zur GUI. Details lassen sich aber leicht über die JavaFX Script Programming Language API Documentation unter http://openjfx.java.sun.com/current-build/doc/api/index.html nachschlagen. Und natürlich steht auch die offizielle Dokumentation von Sun unter http://java.sun.com/javafx zur Verfügung.

Hier gibt es die Umstiegsanleitung für JavaFX Script auf die Finalversion 1.0 als PDF zum Download
In meiner Seite zu JavaFX - http://www.javafx-buch.de gibt es weitere Infos zu JavaFX.

Freitag, 5. Dezember 2008

Nach dem Schneecaos

Die 3 AJAX-Schulungen sind vorüber. Fazinierend, wie sich 3 doch im Grunde gleiche Schulungen auf Grund der verschiedenen Teilnehmer und kleiner Abweichungen in der Agenta entwickeln können. Im Wesentlichen habe ich den gleichen Stoff in allen 3 Schulungen gemacht, aber mit vollkommen verschiedenen Schwerpunkten.

Die 3. Schulung war bei mir vor der Haustür im Taunus. Und da ist am Mittwoch das Schneecaos ausgebrochen. Bin zwar bei der Anfahrt gut hoch auf den Berg gekommen, aber 2 Km vor dem Schulungszentrum hatte ein Bus einen LKW gerammt und die Hauptverkehrsader Richtung Usingen blockiert. Super. Zum Glück kenne ich mich da sehr gut aus und hab Allradantrieb. Ich bin umgedreht und über den Berg eine Umleitung gefahren. Über Finstertal. Muss man mehr sagen? Absolute Wildnis und nix von wegen Schnee geräumt. Aber noch in der Zeit angekommen.

Ansonsten läuft mein Rechner mit der zusätzlichen Netzwerkkarte wieder. Ist doch manchmal gut, wenn man Altrechner ausschlachtet und funktionstüchtige Altteile behält.

Onlinetraining mit Ralph Steyer

Onlinetraining mit Ralph Steyer
Onlinetraining mit Ralph Steyer und anderen Autoren bei Video2Brain