如果我打开另一个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);
}
}
答案 0 :(得分:0)
这是一个已确认的Java错误。看起来它有时会在Java 10中进行修复。
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8140491
那就是说,如果有人有,我会喜欢解决方法。
编辑:我找到的一个解决方法,实际上是丑陋的,就是你可以在隐藏模态子阶段后隐藏并显示所有者阶段。这样可以重新调整大小。你看到舞台消失了,然后重新出现,这很麻烦。