模态JavaFX阶段initOwner阻止所有者调整大小,bug?

时间:2016-07-07 10:39:29

标签: java javafx resize

如果我打开另一个JavaFX(模态)Stage,并将其所有者设置为原始Stage,则无法使用Windows拖动窗口小部件调整原始Stage的大小窗口的右下角

我在Linux中看到这个,但没有Windows或MacOS,所以不能在别处测试......

这是一个最小的例子

import javafx.stage.*;
import javafx.scene.*;
import javafx.event.*;
import javafx.application.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;

public class HelloWorld extends Application
{
    static Stage newStage;

    @Override
    public void start(Stage primaryStage)
    {
        Button btn = new Button();
        btn.setText("open window");
        btn.setOnAction(new EventHandler<ActionEvent>()
        {
            @Override
            public void handle(ActionEvent event)
            {
                if (newStage==null)
                {
                    Button newBtn = new Button("Close window");
                    newBtn.setOnAction(new EventHandler<ActionEvent>()
                    {
                        @Override
                        public void handle(ActionEvent event)
                        {
                            //newStage.hide(); // either or
                            newStage.close();
                        }

                    });
                    newStage = new Stage();
                    newStage.initModality(Modality.WINDOW_MODAL); 
                    newStage.initOwner(primaryStage);    // BUG doing this, makes main window fixed size
                    newStage.initStyle(StageStyle.DECORATED);
                    StackPane newRoot = new StackPane();
                    newRoot.getChildren().add(newBtn);
                    Scene newScene = new Scene(newRoot,200,160);
                    newStage.setScene(newScene);

                }
                newStage.show();
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

1 个答案:

答案 0 :(得分:0)

这是一个已确认的Java错误。看起来它有时会在Java 10中进行修复。

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8140491

那就是说,如果有人有,我会喜欢解决方法。

编辑:我找到的一个解决方法,实际上是丑陋的,就是你可以在隐藏模态子阶段后隐藏并显示所有者阶段。这样可以重新调整大小。你看到舞台消失了,然后重新出现,这很麻烦。