JavaFX在全屏模式下更改场景

马佩

我对JavaFX有问题。我创建了两个场景和切换按钮。当我单击该按钮时,我正在更改场景。但是之前我将全屏设置为true,然后按下按钮后,Windows任务栏显示了片刻。有什么方法可以在不显示此任务栏的情况下更改场景?代码如下:
----主类----

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类----

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);
}
}
Hotzst

我遇到了类似的问题并按照@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;

    }
    ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaFx不会更改场景

来自分类Dev

JavaFx不会更改场景

来自分类Dev

Javafx:在setOnAction中更改场景

来自分类Dev

JavaFX:如何从MenuItem更改场景(FXML)

来自分类Dev

MVC中的JavaFX更改场景(视图)

来自分类Dev

OnClick更改场景问题

来自分类Dev

Swift Spritekit更改场景?

来自分类Dev

使用JavaFX构建ATM的GUI,但无法在主要阶段更改场景

来自分类Dev

QStackedWidget :: setCurrentIndex()更改场景视口

来自分类Dev

带按钮的Unity更改场景

来自分类Dev

spritekit +迅速,更改场景效果不佳

来自分类Dev

更改场景cocos2d

来自分类Dev

QStackedWidget :: setCurrentIndex()更改场景视口

来自分类Dev

如何使用MouseDown更改场景

来自分类Dev

同时设置状态和更改场景

来自分类Dev

插页后更改场景 (SpriteKit)

来自分类Dev

在同一窗口内更改场景

来自分类Dev

JavaFX-3个控制器,更改场景,无法将标签文本从A设置为B

来自分类Dev

如何在全屏模式下隐藏任务栏 JavaFx

来自分类Dev

在Unity中更改JS脚本,以便更改场景

来自分类Dev

Node.snapshot(null,null)更改场景的大小

来自分类Dev

MenuBar更改场景的背景色(Java FX 8)

来自分类Dev

如何通过单击DrawerLayoutAndroid更改场景(导航器)

来自分类Dev

更改场景中所有纹理的最佳方法

来自分类Dev

更改场景时按返回按钮android关闭游戏

来自分类Dev

更改场景后,隐藏的对象不再隐藏

来自分类Dev

使用StartCoroutine或Application.LoadLevel更改场景

来自分类Dev

更改场景时如何使文字保留下来

来自分类Dev

更改场景时如何使用 UnitySingleton 保存 int 值?