2009-09-28 25 views
7

Ich schreibe eine sehr einfache Anwendung in Javafx wo gibt es eine einzige Schaltfläche mit einem Textfeld auf der Bühne als eine Szene. Nun, das Verhalten, das ich will, ist, dass, wenn ich auf die Schaltfläche klicken kann ich laden Szene mit einem anderen Knopf und einer Textbox auf der Bühne und entferne den Knopf, den ich mit dem vorhergehenden Textkasten angeklickt habe. So sollte das Klicken eines Knopfes eine neue Szene auf die Bühne laden. irgendwelche Hinweise, wie ich das machen kann?Mehrere Szenen in JavaFX

Nach Erics Ratschlag: Ich habe diesen Code, und es funktioniert so, wie ich will.

var showScene1 = true; 
var showScene2 = false; 
var showScene3 = false; 

def stage = Stage 
{ 
    title: "Hello World" 

    var scene1 =Scene 
    { 
      content: 
      [ 

            Text { 
          font : Font { 
            size: 24 
          } 
          x: 10, y: 30 
          content: "HelloWorld from Scene1" 
        }, 
        Button 
         { 
          text: "Click Me to change to Scene2 " 
          onMouseClicked: function(e: MouseEvent):Void 
          { 

            showScene2 = true; 

            println("In scene 2"); 

          } 

         } 


      ] 
    } 



    var scene2 =Scene 
     { 
       content: 
       [ 

             Text { 
           font : Font { 
             size: 24 
           } 
           x: 10, y: 30 
           content: "HelloWorld from Scene2" 
         }, 
         Button 
          { 
           text: "Click Me to change to Scene3 " 
           onMouseClicked: function(e: MouseEvent):Void 
           { 
             showScene1 = false; 
             showScene2 = false; 
             showScene3 = true; 
             println("In scene 3"); 

           } 

          } 


       ] 
     } 

    var scene3 =Scene 
     { 
       content: 
       [ 

             Text { 
           font : Font { 
             size: 24 
           } 
           x: 10, y: 30 
           content: "HelloWorld from Scene3" 
         } 


       ] 
     } 


scene: bind if (showScene2) then scene2 
    else if (showScene1) then scene1 
    else scene3 

} 

Antwort

1

Wenn Sie sicher sind, dass Sie nur zwei verschiedene Szenen haben, können Sie nur die Szene Eigenschaft der Bühne binden wie so:

var showSecondScene = false; 
var myButton = Button { 
    onMouseClicked: function(e) { showSecondScene = true; } 
} 
def stage = Stage { 
    scene: bind if (showSecondScene) then secondScene else firstScene 
} 

UPDATE: Dies funktioniert eigentlich, wenn Sie eine beliebige Anzahl von haben Szenen wie so:

scene: bind if (showScene1) then scene1 
    else if (showScene2) then scene2 
    else scene3 

Sie sich anschauen sollten, warum Sie mehr als 2 Szenen haben würde, ‚sichtbar: false‘ sondern entscheiden sich für die Einstellung auf überlappende Gruppe Knoten statt.

+0

ich mehr als 2 Szenen haben und diese Technik ist gut für zwei Szenen, weil JavaFX nicht if-else oder Schaltergehäuse nach Szene binden läßt. Kann ich es anders versuchen? – iceman

+0

Ich habe meine Antwort aktualisiert. Überlegen Sie sich, ob Sie mehrere Szenen oder nur die Sichtbarkeit von mehreren benutzerdefinierten Nodes wünschen. –

+0

Ist es möglich, Debug-Druckanweisungen innerhalb einer Szenendeklaration einzugeben, um zu wissen, ob sie geladen wird oder aufgerufen wird? Ich kann keine Methode innerhalb einer Szene aufrufen. – iceman

1

Eliminieren Sie alle if-else-Anweisungen. Direkt an eine Variable binden, die die aktuelle Szene enthält.

import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.text.Text; 
import javafx.scene.text.Font; 

var currentScene: Scene; 


def scene1: Scene = Scene { 
    content: Text { 
     font : Font { 
      size : 24 
     } 
     x: 10, y: 30 
     content: "Scene 1" 
     onMouseClicked: function(e):Void { 
     currentScene = scene2; 
     } 
    } 
} 

def scene2: Scene = Scene { 
    content: Text { 
     font : Font { 
      size : 24 
     } 
     x: 10, y: 30 
     content: "Scene 2" 
     onMouseClicked: function(e):Void { 
     currentScene = scene1; 
     } 
    } 
} 

Stage { 
    title: "Multi-Scene" 
    width: 250 
    height: 80 
    scene: bind currentScene 
} 

currentScene = scene1; 
0

Sie können eine zweite Szene erstellen, wie Sie Ihre erste Szene gemacht haben. Im fuction des ersten Knopfes ersetzen Sie showScene2 = true; mit: stage.setScene(scene2);

Verwandte Themen