modal JavaFX stage initOwner阻止所有者调整大小,bug?
如果我打开另一个JavaFX(modal)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
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上出现了相同的错误。当切换到应用程序模式时,甚至在不设置所有者的情况下也会发生这种情况。