堆叠新的舞台而不是覆盖

时间:2019-03-07 12:39:27

标签: java javafx

每次我像这样一次创建多个阶段

for (Object o : tableView.getSelectionModel().getSelectedItems())
{
    if (o != null)
    {
        try
        {
            FXMLLoader  fxmlLoader  = new FXMLLoader(getClass().getResource("/gui/fxml/Stage.fxml"));
            Parent      root1;

            root1 = (Parent) fxmlLoader.load();

            Stage stage = new Stage();
            stage.initStyle(StageStyle.DECORATED);
            stage.setScene(new Scene(root1));
            stage.show();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

舞台布置在一个位置上,所以它们重叠了。

重叠阶段的屏幕截图: Screenshot of overlaying stages

我的目标是将它们像Windows警报一样堆叠:

堆叠阶段: Stacked stages

我该如何实现?

1 个答案:

答案 0 :(得分:2)

通过使用stage.setX().setY(),如果您像这样一直保持x和y值的持续递增,则可以轻松实现这一目标。

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        int x = 400;
        int y = 400;
        for (int i = 0; i < 5; i++) {
            VBox vBox = new VBox();
            vBox.setAlignment(Pos.CENTER);
            vBox.getChildren().addAll(new Label("ALERT!!! ALERT!!!"), new Label("Label #:"+i));

            Stage stage  = new Stage();
            stage.setX(x);
            stage.setY(y);
            stage.setScene(new Scene(vBox));
            stage.show();

            x+=20;
            y+=20;
        }
    }
    public static void main(String[] args) { launch(args); }
}