2009-09-28 121 views
7

我在Javafx中編寫了一個非常簡單的應用程序,其中一個按鈕的舞臺上有一個文本框作爲一個scene.Now,我想要的行爲是,當我點擊按鈕時,我可以加載另一個場景中的另一個按鈕和一個文本框在舞臺上,並刪除按鈕,我與前一個文本框一起點擊。所以點擊一個按鈕應該在舞臺上加載一個新的場景。有關我如何做到這一點的任何提示?JavaFX中的多個場景

按照Eric的建議:我有這個代碼,它的工作方式是我想要的。

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 

} 

回答

1

如果你確信你只會有2個不同的場景,你可以在舞臺的場景屬性綁定像這樣:

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

UPDATE:如果您有任何數量的這種實際工作場景像這樣:

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

你可能會考慮爲什麼你有2點以上的場景,而是選擇設置「可見:假」上重疊組節點來代替。

+0

我有2級以上的場景和這個技術只是罰款2點的場景,因爲JavaFX的不允許現場綁定後的if-else或開關的情況下。有沒有其他方法可以嘗試? – iceman 2009-09-29 13:19:13

+0

我已經更新了我的答案。絕對考慮是否需要多個場景或多個CustomNode設置適當的可見性。 – 2009-09-29 16:58:38

+0

是否可以在場景聲明中輸入調試打印語句來知道它的加載或被調用?我無法在場景中調用任何方法。 – iceman 2009-09-30 08:26:23

1

消除所有if-else語句。直接綁定到包含當前場景的變量。

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

你可以像你第一次做一個secon場景。在 第一個按鈕的機能的研究更換showScene2 = true;有:stage.setScene(scene2);