2016-04-05 11 views
2

Tüm JavaFX kodumu içeren bir Main.java sahibiyim, tüm bir programın birden fazla sahnesi burada saklanır ve okunması çok zor hale gelir.JavaFX - Başka bir sınıf etkinliğinden bir sahne açın

Her bir "ekran" (Scene) 'u ayrı bir .java sınıfında depolamayı denemek istiyorum. Böylece daha kolay bir şekilde bulabildiğim ve değiştirebileceğim vb. JavaFX için yeni ve hala OOP'u öğreniyorum.

Aşağıdaki örnekte, Button tıklatma etkinliğinde yeni bir Scene (ayrı bir .java sınıfından) açmak istiyorum. Şu anda tek sınıfta çalışıyorum. Ama başka bir dosyaya nasıl yaklaşacağımı bilmiyorum. Tabloları doldurmak için iki dizi listesini ayrı bir sınıfa geçirmem gerekiyor.

Aşağıda cezamın bir örneği.

Button:

goToNextScene = new Button("View next scene"); 
goToNextScene.setOnAction(e -> window.setScene(AnotherClassA.sceneLayout, aList, bList)); 
// another try: 
goToNextScene.setOnAction(e -> AnotherClassA.sceneLayout(aList, bList)); 

yeni sınıf: önceden

public class AnotherClassA { 

    private BorderPane bP; 
    private HBox hBtnMenu; 
    private Button hMenuBtnA, hMenuBtnB, returnBtn; 
    public Scene sceneLayout; 

    public Scene sceneLayout(ArrayList aList, ArrayList bList) { 

     // array lists not used yet, but will come 

     hBtnMenu = new HBox(); 
     hBtnMenu.setSpacing(10); 
     hBtnMenu.setPadding(new Insets(10,10,10,10)); 

     hMenuBtnA = new Button("Btn A"); 
     //hMenuBtnA.setOnAction(e -> window.setScene(AnotherClassA.sceneA)); 

     hMenuBtnB = new Button("Btn B"); 
     //hMenuBtnB.setOnAction(e -> window.setScene(AnotherClassB.sceneB)); 

     returnBtn = new Button("Return to Home"); 
     //returnBtn.setOnAction(e -> window.setScene(Main.splashScene)); 

     hBtnMenu.getChildren().addAll(hMenuBtnA, hMenuBtnB, returnBtn); 

     bP = new BorderPane(); 
     bP.setTop(hBtnMenu); 

     animalSceneLayout = new Scene(bP, 1200, 760); 

     return asceneLayout; 
    } 
} 

Teşekkür (geçirilen dizi listeleri göstermek için daha fazla düğme ve yakında iki tablo ile sadece ekranı).

+0

Sen 'kamu sevdiği sınıfların hepsi ile Sahne uzatabilirsiniz SceneA sınıfı Scene'yi genişletir ve 'public SceneA (Ana kök, ArrayList a, ArrayList b) \t {gibi bir kurucu oluşturur.\t \t süper (kök); \t} ' Ardından: ' goToNextScene.setOnAction (e -> window.setScene (yeni Scenea'dan (yeni AnchorPane() alist, Blist)); Cevabınız için ' – DVarga

+0

@DVarga sayesinde bu ben tam olarak ne M arıyor! Mükemmel çalışıyor! Bunu bir cevap olarak gönderirseniz, bazı internet noktaları yollayabilirsiniz :) Tekrar teşekkürler – webstudent

cevap

1

Sen public class SceneA extends Scene gibi bir şey yapıyor, sınıflarınızla hepsi ile Scene uzatmak ve sonra

public SceneA(Parent root, ArrayList a, ArrayList b) { super(root); } 

gibi bir kurucu oluşturabilirsiniz:

goToNextScene.setOnAction(e -> window.setScene(new SceneA(new AnchorPane(), aList, bList)); 
İlgili konular