【问题标题】:modal JavaFX stage initOwner prevents owner from resizing, bug?modal JavaFX 阶段 initOwner 阻止所有者调整大小,错误?
【发布时间】:2016-07-07 10:39:28
【问题描述】:

如果我打开另一个JavaFX(模态)Stage,并将其所有者设置为原始Stage,则无法调整原始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);
    }
}

【问题讨论】:

  • 作为一个澄清点,在辅助窗口关闭后主窗口不能调整大小....
  • JavaFX8、jdk1.8.0_73、Windows7 - 没问题。
  • jdk18.0_92,Windows 7,没有错误
  • 您尝试过上面的示例吗?关闭第二个窗口后能否调整窗口大小?
  • 在 1.8.0_131 的 linux 上遇到了同样的错误。切换到 APPLICATION_MODAL 时,甚至在没有设置所有者的情况下也会发生。

标签: java javafx resize


【解决方案1】:

这是一个已确认的 Java 错误。看起来它的目标是在某个时候在 Java 10 中修复。

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

也就是说,如果有人有一个解决方法,我很乐意。

编辑:我发现的一种解决方法,虽然丑陋,但您可以在隐藏模态子阶段后隐藏和显示所有者阶段。这将重新启用调整大小。但是,您会看到舞台消失并重新出现,这很混乱。

【讨论】:

    猜你喜欢
    • 2014-01-23
    • 2013-06-22
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    相关资源
    最近更新 更多