2016-02-27 2 views
2

У меня проблема с JavaFX. Я создал две сцены и кнопку переключения. Когда я нажимаю эту кнопку, я меняю сцену. Но раньше я устанавливал полноэкранный режим на true, и после того, как я нажал кнопку, панель задач Windows показывается на мгновение. Есть ли способ изменить сцены без видимости этой панели задач? Существует код:
---- Основной класс ----Смена сценариев JavaFX в полноэкранном режиме

import java.io.IOException; 

public class Main { 
    public static void main(String[] args) throws InterruptedException, IOException { 
     DesktopApplication.launch(DesktopApplication.class); 
    } 
} 

---- DesktopApplication класс ----

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.input.KeyCombination; 
import javafx.scene.layout.HBox; 
import javafx.scene.text.Text; 
import javafx.stage.Screen; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 

public class DesktopApplication extends Application implements Runnable { 

Scene firstScene; 
Scene secondScene; 
Scene scene; 
public static Stage primaryStagePublic; 

public DesktopApplication() { 
} 

@Override 
public void start(Stage primaryStage) throws Exception { 
    primaryStage.setTitle("Title"); 
    primaryStage.initStyle(StageStyle.TRANSPARENT); 
    primaryStage.initStyle(StageStyle.UNDECORATED); 

    int width = (int) Screen.getPrimary().getBounds().getWidth(); 
    int height = (int) Screen.getPrimary().getBounds().getHeight(); 

    HBox mainLayout = new HBox(); 
    mainLayout.getChildren().add(new Text("hello!")); 
    MyLayout myLayout = new MyLayout(this); 

    firstScene = new Scene(myLayout,width,height); 
    secondScene = new Scene(mainLayout, width, height); 

    scene = firstScene; 

    primaryStage.setScene(scene); 
    primaryStage.setFullScreen(true); 
    primaryStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH); 
    primaryStage.show(); 

    primaryStagePublic = primaryStage; 

} 

@Override 
public void run() { 
    Thread thread = new Thread() { 
     public void run() { 
      launch(DesktopApplication.class); 
     } 
    }; 

    thread.start(); 

    while (true) { 

    } 
} 

public void swapScenes(Stage primaryStage){ 
    primaryStage.setScene(secondScene); 
    primaryStage.setFullScreen(true); 
    primaryStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH); 
} 
} 

---- MyLayout class-- -

import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.layout.HBox; 
public class MyLayout extends HBox{ 

private DesktopApplication desktopApplication; 

public MyLayout(DesktopApplication desktopApplication) { 
    this.desktopApplication = desktopApplication; 
    init(); 
} 

private void init(){ 

    this.setStyle("-fx-background-color: #f8ff7d;"); 
    Label text = new Label("testing"); 
    Button button = new Button("Button"); 
    button.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      desktopApplication.swapScenes(DesktopApplication.primaryStagePublic); 
     } 
    }); 
    this.getChildren().addAll(text, button); 
} 
} 
+1

Положите соответствующие коды здесь ... – Aditya

+1

Вы можете использовать одну сцену и переключить корень сцены вместо переключения сцен ? –

+0

Возможный дубликат [Полноэкранный режим работает неправильно в JavaFX 2.1?] (Http://stackoverflow.com/questions/11273378/fullscreen-stage-is-not-working-properly-in-javafx-2-1) –

ответ

3

У меня была аналогичная проблема, и решить ее как @James_D предложил: не заменять сцену в целом, но только корневой элемент:

public void swapScenes(Parent newContent){ 
    stage.getScene().setRoot(newContent); 
} 

Это требует изменения остальной части кода инициализации немного:

public class DesktopApplication extends Application implements Runnable { 

    Parent myLayout; 
    Parent mainLayout; 
    Scene scene; 
    public static Stage stage; // if possible make this private and non static 

    public DesktopApplication() { 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     primaryStage.setTitle("Title"); 
     primaryStage.initStyle(StageStyle.TRANSPARENT); 
     primaryStage.initStyle(StageStyle.UNDECORATED); 

     int width = (int) Screen.getPrimary().getBounds().getWidth(); 
     int height = (int) Screen.getPrimary().getBounds().getHeight(); 

     mainLayout = new HBox(); 
     mainLayout.getChildren().add(new Text("hello!")); 
     myLayout = new MyLayout(this); 

     scene = new Scene(myLayout,width,height); 

     primaryStage.setScene(scene); 
     primaryStage.setFullScreen(true); 
     primaryStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH); 
     primaryStage.show(); 

     primaryStagePublic = primaryStage; 

    } 
    ... 
+0

Хороший ответ: важным для моего случая оказалось: primaryStage.setFullScreenExitKeyCombination (KeyCombination.NO_MATCH); - так как я случайно попал в ту же комбинацию, чтобы выйти из моего приложения. –