2009-09-28 29 views
7

Javafx'te çok basit bir uygulama yazıyorum, burada bir metin kutusuyla tek bir düğme sahnede tek sahnede. Şimdi, istediğim davranış düğmesine tıkladığımda başka bir tane yükleyebiliyorum Sahnede başka bir düğme ve bir metin kutusu ile sahne ve önceki metin kutusu ile birlikte tıklattığım düğmeyi kaldırın. Bu yüzden bir düğmeye basmak sahnede yeni bir sahne yüklemelidir. Bunu nasıl yapabileceğime dair ipuçları var mı?JavaFX'teki birden çok sahne

Eric'in tavsiyesi üzerine: Bu koda sahibim ve istediğim gibi çalışıyor. Eğer sadece 2 farklı sahneleri olacak eminseniz

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 

} 

cevap

1

, sadece şöyle Sahne sahne özelliği bağlayabilirsiniz:

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

UPDATE: Eğer herhangi bir sayıda varsa, bu gerçekten çalışıyor şöyle sahneler:

scene: bind if (showScene1) then scene1 
    else if (showScene2) then scene2 
    else scene3 
sen yerine 'görünür: false' ayarı için gözle 2'den fazla sahneleri olurdu neden düşünebilirsiniz

yerine Grup düğümleri örtüşen üzerinde.

+0

: ilk düğmenin fuction size showScene2 = true; ile değiştirin. Denediğim başka bir yolu var mı? – iceman

+0

Cevabımı güncelledim. Birden fazla sahne veya sadece birden fazla CustomNodes görünürlük ayarını istediğiniz gibi düşünün. –

+0

Yüklemenin ya da çağrılmasının bilinip bilinmediğini görmek için bir hata bildiriminde hata ayıklama yazdırma ifadeleri girilebilir mi? Bir sahnede herhangi bir yöntem arayamıyorum. – iceman

1

Tüm if-else ifadelerini eleyin. Geçerli sahneyi içeren bir değişkene doğrudan bağlanın.

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

İlkini yaptığınız gibi bir manzara görüntüsü oluşturabilirsiniz. Ben 2'den fazla sahnem var ve JavaFX sahne sonra bağlaması if-else veya switch case izin vermediğinden bu teknik 2 sahneler için gayet güzel stage.setScene(scene2);

İlgili konular