Home-Produkte-Testarea-Kontakt-Datenschutz-Aktualisiert: 17-Jul-2008
< Voriger Tag   Nächster Tag >

Donnerstag, 17. Juli 2008

JavaFX: Stage{} - auf dem Weg zum Node-basierten GUI-System

JavaFX unterscheidet derzeit zwischen den GUI-Elementen von Swing (javafx.ext.swing) und den grafischen Elementen wie Rechteck, Kreis von Scene Graph (javafx.scene.*). Dies ist eine recht künstliche Unterscheidung, die dazu führt, dass es für beide Komponenten eigene Layout-Manager gibt und grafische Elemente über Canvas{} relativ künstlich in eine Swing-GUI eingebettet werden. Mit dem "node-centric"-Approach wird diese Unterscheidung aufgehoben und alle Elemente, GUI und Grafik, als Nodes behandelt werden. Zwei Schritte hierzu sind javafx.application.* und Stage{}.

James Weaver hat darüber bereits am 9. Juli berichtet, kurz nachdem die erste Stage-Implementierung veröffentlicht wurde.

javafx.application.*

javafx.application.* enthält folgende Klassen, in denen die dargestellten Inhalte als Nodes verwaltet werden.

  • Applet
  • Application
  • Dialog
  • Frame
  • Stage
  • Window

Umbenennung innerhalb von javafx.ext.swing.*

Den bisher schon existierenden GUI-Klassen gleichen Namens in javafx.ext.swing.* wurde ein Swing vorangestellt, um Namenskonflikte zu umgehen.

  • SwingApplication
  • SwingDialog
  • SwingFrame
  • SwingWindow

Damit bisherige GUI-Programme für javafx.ext.swing.* mit der aktuellen JavaFX-Version laufen muss also beispielsweise Frame{} in SwingFrame{} umbenannt werden. Weitere Änderungen sind nicht nötig.

Stage{}

Neu hinzugekommen in javafx.application.* ist Stage{}. Stage{} ist der neue Container für die Nodes der grafischen Elemente und in Zukunft zudem für die GUI-Elemente, die sich dann gemeinsam mit den grafischen Elementen in einer Hierarchie befinden, so dass keine unterschiedlichen Layout-Manager mehr benötigt werden. Stage{} enthält folgende Attribute:

content Node[]
Der dargestellte Inhalt basierend auf Node{}.
fill Paint
Der Hintergrund, z.B. color.WHITE.
height Integer
Die Höhe der Stage{}, die sich an die des Fensters/Applets anpasst.
width Integer
Die Breite der Stage{}, die sich an die des Fensters/Applets anpasst.

Beispiel: Hello World!

import javafx.application.*;
import javafx.scene.*;
import javafx.scene.text.*;
import javafx.scene.paint.*;


Frame{
    closeAction: function(): Void {java.lang.System.exit(0);}

    title  : 'Stage: Hello World!'
    width  : 270
    height : 150
    visible: true

    stage: Stage{
        fill   : Color.WHITE
        content: Text {x         : 60
                       y         : 40
                       content   : 'Hello World!'
                       font      : Font{size: 24}
                 }// Text
    }// Stage
}// Frame

Beispiel: Resize Frame

width und height lassen sich dazu nutzen, den Inhalt von Stage{} an die Größe des Fensters anzupassen.

import javafx.application.*;
import javafx.scene.geometry.*;
import javafx.scene.paint.*;


Frame{
    var stageRef: Stage;

    closeAction: function(): Void {java.lang.System.exit(0);}
     
    title      : 'Stage: Resize Frame'
    width      : 240
    height     : 240
    visible    : true

    stage: stageRef = Stage{
        fill   : Color.WHITE
        content: Rectangle{x     : 10
                           y     : 10
                           width : bind stageRef.width  - 20
                           height: bind stageRef.height - 20
                           fill  : Color.BLUE
                 }// Rectangle
    }// Stage   
}// Frame

Neben diesen grafischen Elementen wird man in Zukunft auch die GUI-Elemente aus javafx.ext.swing innerhalb von Stage.content benutzen können - solange sie nicht als Nodes vorliegen kann man sie mit Hilfe des weiterhin vorhandenen ComponentView{} einbinden. Und für das Layout werden sich in javafx.scene.layout.* voraussichtlich bekannte Layout-Manager wie FlowPanel{} und GridPanel{} wiederfinden.

Beispiele auf dieser Site

Was ist mit javafx.ui.* und javafx.gui.*?

Das in älteren JavaFX Script-Beispielen vorhandene javafx.ui.*-Paket wurde während der JavaFX-Entwicklung in javafx.gui.* und dieses in javafx.ext.swing.* umgewandelt. JavaFX wird von Sun als Open Source-Projekt entwickelt, so dass man solche Entwicklungen live verfolgen kann. Mit der Veröffentlichung der Vorschauversion des SDK (angekündigt für diesen Juli) dürfte sich die API dann so langsam stabilisieren.

Literatur

[Direktlink]

< Voriger Tag   Nächster Tag >

  RSS V0.91

<Juli 2008 >
 010203040506
07080910111213
14151617181920
21222324252627
28293031   

Home-Produkte-Testarea-Kontakt-Datenschutz-Aktualisiert: 17-Jul-2008
(C) 2000-2018 by Sven Drieling