【问题标题】:How to make a JavaFX modal child window not appear in alt-tab如何使 JavaFX 模态子窗口不出现在 alt-tab 中
【发布时间】:2018-04-21 17:19:09
【问题描述】:

我有一个 JavaFX 应用程序,它有一个模式窗口,它将主应用程序窗口设置为父窗口。当该弹出窗口出现时,我的 Ubuntu 任务切换器(alt-tab)似乎认为这是一个完全不同的窗口;它和主应用程序窗口都显示为选项。如何配置 JavaFX 以使此窗口不会在 alt-tab 中显示为单独的选项?

这是一个最小的例子:

public class PopupExample extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        Stage window = new Stage();
        window.initOwner(primaryStage);
        window.initModality(Modality.APPLICATION_MODAL);
        window.show();
    }
}

【问题讨论】:

  • 对我来说,这是 Windows 管理器的问题,而不是 java/fx 的问题。直到最近,在任务栏中显示窗口标题还存在问题。

标签: java javafx


【解决方案1】:

嗯,这很简单,只需将StageStyle.UTILITY 设置为initStyle 即可用于第二个Stage。通过这样做,Alt+Tab 会显示一个窗口。

下面的代码演示了如何处理这个问题:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class PopupExample extends Application
{
    @Override
    public void start(Stage primaryStage) throws Exception
    {
        VBox vBox = new VBox();
        vBox.setAlignment(Pos.TOP_CENTER);
        Button showPopUpbutton = new Button("Show Stage_TWO");
        showPopUpbutton.setOnAction(event -> showPopup());
        vBox.getChildren().add(showPopUpbutton);
        Scene scene = new Scene(vBox, 300, 300);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Stage_One");
        primaryStage.show();
    }

    private void showPopup()
    {
        Stage stage = new Stage();
        VBox vBox = new VBox();
        vBox.setAlignment(Pos.TOP_CENTER);
        Label label = new Label("Stage_TWO");
        Button closeStageButton = new Button("Close Stage_TWO");
        closeStageButton.setOnAction(event -> stage.close());
        vBox.getChildren().addAll(label, closeStageButton);
        Scene scene = new Scene(vBox, 200, 200);
        stage.setScene(scene);
        stage.initStyle(StageStyle.UTILITY);
        stage.initModality(Modality.APPLICATION_MODAL);
        stage.setTitle("Stage_TWO");
        stage.show();
    }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多