【发布时间】: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 时,甚至在没有设置所有者的情况下也会发生。