JavaFX-文件浏览器无法在另一个全屏阶段打开

时间:2019-12-16 17:38:00

标签: java file user-interface javafx

我实际上已经开始学习JavaFX,但遇到了问题!

我有一个全屏Stage,当我单击按钮时,我想在主要阶段打开一个新阶段! 但实际上,第二阶段直接在桌面上产生。

我不知道我在哪里失败或忘记了什么。如果有人可以帮助我或遇到相同问题的其他人,谢谢。

对不起,我用法语发表评论:/

public void start(Stage stage) throws FileNotFoundException {         
    //Chargement de l'image 
    Image image = new Image(new FileInputStream("res/spaceB.gif"));  
    ImageView imageView = new ImageView(image); 

    //Création du bouton
    Button b = new Button();
    // Rajout de l'image sur le boutton
    b.setGraphic(new ImageView(new Image((new FileInputStream("res/play.png")))));
    //Reduuit le boutton qu'a l'image
    b.setFont(new Font(0));
    //Taille boutton
    b.setLayoutX(850);
    b.setLayoutY(450);


    /*---------------------------------------------------------------------------
     * -------------------------------------------------------------------------
     */
    b.setOnAction(e -> {
        //        FileChooserExample f = new FileChooserExample();
        Stage s2 = new Stage();

        Button choise = new Button("Choisir son fichier");
        choise.setLayoutX(8);
        choise.setLayoutY(45);

        choise.setOnAction(e2 -> {

            FileChooser fileChooser = new FileChooser();
            fileChooser.setInitialDirectory(new File("doc"));
            File selectedFile = fileChooser.showOpenDialog(s2);
            if(selectedFile != null) {
                nom = selectedFile.getName();
            }
        });


        Group g2 = new Group(choise);
        Scene sc2 = new Scene(g2,600,500);
        //Ajout nom et raccord de la scene au stage
        s2.setTitle("File recorder ");  
        s2.setScene(sc2);
        s2.show(); 
    });     
    /*---------------------------------------------------------------------------
     * -------------------------------------------------------------------------
     */     

    //Je possitionne l'image en 0/0
    imageView.setX(0); 
    imageView.setY(0); 

    //Me permet d'avoir l'image en plein ecran (marche que pour l'IUT)
    //Pas encore trouvé pour faire un fullscreen d'une imageview
    imageView.setFitHeight(1950); 
    imageView.setFitWidth(1950); 

    //Garde le ratio de l'image et évite un gros zoom
    imageView.setPreserveRatio(true);  

    //Creating a Group object  
    Group root = new Group(imageView, b);   
    Scene scene = new Scene(root, 600, 500);  


    //Ajout nom et raccord de la scene au stage
    stage.setTitle("Bienvenue à SPACE-DUCK");  
    stage.setScene(scene);

    //Met en plein écran le GIF et affiche
    stage.setFullScreen(true);
    stage.setResizable(true);
    stage.setAlwaysOnTop(true);
    stage.show();
}

2 个答案:

答案 0 :(得分:2)

Bonjour Nekolas,

您的情况不是错误。为了使您的阶段出现在主要阶段中,您必须在这两个实例之间创建依赖关系:stage必须是s2 owner 。您可以通过以下命令来实现它:

s2.initOwner(stage);

在命令s2.show()之前。 我已经用随机图片测试了您的代码,并且可以正常工作:


Interface principale avec le bouton PLAY au milieu 主界面,中间有一个小的PLAY按钮


Appui sur le bouton PLAY 按下播放按钮


J'espèrequeçat'aidera:)

答案 1 :(得分:0)

也许是一个错误。 试试这个:

添加

s2.setAlwaysOnTop(true);

替换

stage.setFullScreen(true); -> stage.setMaximized(true);