modal JavaFX stage initOwner阻止所有者调整大小,bug?

modal JavaFX stage initOwner阻止所有者调整大小,bug?,java,javafx,resize,Java,Javafx,Resize,如果我打开另一个JavaFX(modal)Stage,并将其所有者设置为原始Stage,则无法使用窗口右下角的windows拖动小部件调整原始Stage的大小 我在Linux中看到了这一点,但不拥有windows或MacOS,因此无法在其他地方测试它 这里有一个最小的例子 import javafx.stage.*; import javafx.scene.*; import javafx.event.*; import javafx.application.*; import javafx.s

如果我打开另一个JavaFX(modal)
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);
    }
}
导入javafx.stage.*; 导入javafx.scene.*; 导入javafx.event.*; 导入javafx.application.*; 导入javafx.scene.layout.*; 导入javafx.scene.control.*; 公共类HelloWorld扩展了应用程序 { 静态阶段新闻阶段; @凌驾 公共无效开始(阶段primaryStage) { 按钮btn=新按钮(); btn.setText(“打开窗口”); btn.setOnAction(新的EventHandler() { @凌驾 公共无效句柄(ActionEvent事件) { if(newStage==null) { 按钮newBtn=新按钮(“关闭窗口”); newBtn.setOnAction(新的EventHandler() { @凌驾 公共无效句柄(ActionEvent事件) { //newStage.hide();//或 newStage.close(); } }); newStage=新阶段(); newStage.initmodel(model.WINDOW_model); initOwner(primaryStage);//这样做会使主窗口大小固定 newStage.initStyle(舞台风格装饰); StackPane newRoot=新StackPane(); newRoot.getChildren().add(newBtn); 场景newScene=新场景(newRoot,200160); newStage.setScene(newScene); } newStage.show(); } }); StackPane root=新的StackPane(); root.getChildren().add(btn); 场景=新场景(根,300,250); setTitle(“你好,世界!”); 初级阶段。场景(场景); primaryStage.show(); } 公共静态void main(字符串[]args) { 发射(args); } }
这是一个已确认的Java错误。看起来它的目标是在Java10中修复

也就是说,如果有人有一个解决办法,我会喜欢的


编辑:我发现的一个解决方法,虽然很难看,但是在隐藏模式子阶段之后,可以隐藏和显示所有者阶段。这样可以重新调整大小。不过,您会看到舞台消失并重新出现,这很混乱。

作为澄清,在关闭辅助窗口后,无法调整主窗口的大小……JavaFX8,jdk1.8.0_73,Windows7-没有问题。jdk18.0_92,Windows7,没有错误您尝试过上面的示例吗?在关闭第二个窗口后,您是否能够调整窗口的大小?在linux 1.8.0131上出现了相同的错误。当切换到应用程序模式时,甚至在不设置所有者的情况下也会发生这种情况。