2016-05-27 2 views
2

Так что я пытаюсь просто изменить между двумя сценами в javafx, но я пришел в эту вновь возникающую проблему, которую я не могу исправить. Это показано в следующем коде:Я не могу изменить сцены в javafx

import javafx.application.Application; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.Group; 
import javafx.scene.paint.Color; 

public class TestApplication extends Application 
{ 
    private Stage stage; 
    private Scene scene, scene2; 
    public void start(Stage s) 
    { 
     scene=new Scene(new Group()); 
     scene2=new Scene(new Group()); 

     scene.setFill(Color.GREEN); 
     scene2.setFill(Color.ORANGE); 

     scene.setOnMouseClicked(e-> changeScene(scene2)); 
     scene2.setOnMouseClicked(e-> changeScene(scene)); 

     stage=s; 
     s.setScene(scene); 
     s.show(); 
    } 
    public void changeScene(Scene nex) 
    { 
     stage.setScene(nex); 
     System.out.println("here"); 
    } 

    public static void main(String[] args) 
    { 
     launch(args); 
    } 
} 

Я делаю что-то неправильно? Как я могу это исправить?

ответ

2

Что происходит неправильно

Вы ничего не размещать в сценах (просто пустая группа). По умолчанию сцены (как правило) имеют размер до предпочтительного размера содержащегося в них контента. Поскольку ваши сцены не имеют содержания любого размера, тогда сцены не должны иметь никакого размера. Я думаю, что тот факт, что первая сцена даже появляется, - это немного причуда системы JavaFX, где она, кажется, устанавливает некоторый размер по умолчанию для начальной сцены, когда она не может выработать какой-либо предпочтительный размер для сцены (просто так появляется начальное окно).

Как это исправить

Чтобы это исправить, поставить некоторое содержание в закрытых сценах (и/или установить начальный размер сцены в ваших конструкторах сцены).

scene 1 scene 2

import javafx.application.Application; 
import javafx.scene.control.Label; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.Group; 
import javafx.scene.paint.Color; 

public class TestApplication extends Application { 
    private Stage stage; 
    private Scene scene, scene2; 

    public void start(Stage s) { 
     scene = new Scene(new Group(new Label("1")), 200, 150); 
     scene2 = new Scene(new Group(new Label("2")), 200, 150); 

     scene.setFill(Color.GREEN); 
     scene2.setFill(Color.ORANGE); 

     scene.setOnMouseClicked(e -> changeScene(scene2)); 
     scene2.setOnMouseClicked(e -> changeScene(scene)); 

     stage = s; 
     s.setScene(scene); 
     s.show(); 
    } 

    private void changeScene(Scene nex) { 
     stage.setScene(nex); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

Вот некоторые интересные Dropshadow. – DavidS

+0

:-) К сожалению, я не могу взять кредит за тень: [OS X screenshot cmd + shift + 4] (https://support.apple.com/en-us/HT201361) – jewelsea

Смежные вопросы