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

时间:2019-01-30 13:23:45

标签: javafx height fxml

这是我的启动方法:

    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和controller中使用maxheight和prefheight都行不通。有什么想法吗?我的意思是单击按钮时会从控制器的方法单击管理器中动态更改高度。

2 个答案:

答案 0 :(得分:2)

让舞台对更改做出响应(调整):

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

答案 1 :(得分:1)

您可以通过抓住窗口并从此处进行设置来更改高度,这就是您的clickManager()的外观

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

我也除去̶-̶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̶"̶̶你在你FXML所以它不一不小心搞成与任何

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