使用 prefHeight 动态改变高度不起作用

Dynamically changing height with prefHeight is not working

这是我的启动方法:

    Parent root = FXMLLoader.load(getClass().getResource("login.fxml"));

    primaryStage.initStyle(StageStyle.TRANSPARENT);
    Scene scene1 = new Scene(root);
    scene1.setFill(Color.TRANSPARENT);
    primaryStage.initStyle(StageStyle.TRANSPARENT);
    primaryStage.setScene(scene1);
    primaryStage.setTitle("Menu");
    primaryStage.show();

这是我的 FXML:

<Pane fx:id="loginPane"  maxHeight="-Infinity" maxWidth="- 
 Infinity"minHeight="-Infinity" minWidth="-Infinity" prefHeight="300.0" 
 prefWidth="600.0" xmlns="http://javafx.com/javafx/8" 
 xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">

<children>
<Button fx:id="login" layoutX="250.0" layoutY="37.0" 
 mnemonicParsing="false" onMouseClicked="#clickManager" text="login" />
</children>
 </Pane>

还有我的控制器:

public class Controller implements Initializable {
    @FXML
    public Button login;
    @FXML
    public Pane loginPane;

    @FXML
    public void clickManager() {
        login.setOpacity(0);
        loginPane.setPrefHeight(700);
        loginPane.setStyle("-fx-background-color: black");
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }
}

更改颜色有效,但无论我如何在 fxml 和控制器中使用 maxheight 和 prefheight,这都不是 working.Any 想法?我的意思是在单击按钮时从控制器的方法单击管理器动态更改高度。

您可以通过抓住 window 并从那里设置它来更改高度,这就是您的 clickManager() 应该的样子

public void clickManager() {
    login.setOpacity(0);
    //loginPane.setPrefHeight(800);
    loginPane.getScene().getWindow().setHeight(700);
    loginPane.setStyle("-fx-background-color: black");
}

̶I̶ ̶w̶o̶u̶l̶d̶ ̶a̶l̶s̶o̶ ̶r̶e̶m̶o̶v̶e̶ ̶t̶h̶e̶ ̶-̶I̶n̶f̶i̶n̶i̶t̶y̶'̶s̶ ̶e̶x̶.̶̶m̶i̶n̶W̶i̶d̶t̶h̶=̶"̶-̶I̶n̶f̶i̶n̶i̶t̶y̶"̶̶ ̶y̶o̶u̶ ̶h̶a̶v̶e̶ ̶i̶n̶ ̶y̶o̶u̶r̶ ̶f̶x̶m̶l̶ ̶s̶o̶ ̶i̶t̶ ̶d̶o̶e̶s̶n̶t̶ ̶a̶c̶c̶i̶d̶e̶n̶t̶a̶l̶l̶y̶ ̶m̶e̶s̶s̶ ̶w̶i̶t̶h̶ ̶a̶n̶y̶t̶h̶i̶n̶g̶

此外,您不需要在 Start 方法中设置此 primaryStage.initStyle(StageStyle.TRANSPARENT); 两次

让舞台响应(调整)变化:

    loginPane.setPrefHeight(700);
    loginPane.getScene().getWindow().sizeToScene();