【问题标题】:JavaFX change stage size from outside the constructorJavaFX 从构造函数外部更改阶段大小
【发布时间】:2016-09-20 12:23:14
【问题描述】:

我有类似的东西

public class MyClass extends Application {

    public void start(Stage stage) {
        MyModel model = new MyModel();
        MyController controller = new MyController(model);
        MyView view = new MyView(model, controller);
        Scene scene = new Scene(view);

        stage.setTitle("MyTitle");
        stage.setScene(scene);
        stage.sizeToScene();
        stage.show();
        view.requestFocus();
    }

    public void changeStageSize(int width, int height) {
        ...
    }

    public static void main(String[] args) {
        launch(args);
    }
}

我必须在 changeStageSize void 中写入什么来更改我的 stage 大小?

【问题讨论】:

  • 没关系,因为changeStageSize 没有在任何地方使用...
  • 我在 MyView 类中使用它。没有发布它,因为那里没有什么特别的事情发生。
  • 两个问题:#1:您的Application 不包含对Stage 的引用,#2:您的MyView 类不包含对Application 的引用。你可以做什么:#1:将Stage 的引用传递给控制器​​,#2:在控制器中使用通过(Stage) node.getScene().getWindow() 添加到场景图中的任何节点获取Stage。然后在那里写调整大小的方法。您可以在this question 中找到这两种情况的示例。然后:stage.setWidthstage.setHeight

标签: java javafx resize stage


【解决方案1】:
@Override
public void start(Stage primaryStage) {
    Button btn = new Button("Resize");
    btn.setOnAction((ActionEvent event) -> {
        changeStageSize(primaryStage, 800, 500);
        primaryStage.centerOnScreen();
    });

    StackPane root = new StackPane(btn);
    Scene scene = new Scene(root);

    primaryStage.setScene(scene);
    primaryStage.show();
}

public void changeStageSize(Window stage, int width, int height) {
    stage.setWidth(width);
    stage.setHeight(height);
}

只需设置Windowwidthheight。您可以使用字段而不是传递 stage 参数。如果您不这样做,恕我直言,该方法应设为静态,因为不会访问您的应用程序类的实例成员。

【讨论】:

    【解决方案2】:

    由于MyView 实例是场景的根,MyView你可以这样做

    Window win = getScene().getWindow();
    win.setWidth(...);
    win.setHeight(...);
    

    无需将此方法委托回Application 子类(而且您真的不希望MyView 依赖于它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 2014-01-23
      相关资源
      最近更新 更多