【发布时间】:2015-12-30 20:12:26
【问题描述】:
在我的应用程序中,我有一个BorderPane,其中包含一个ScrollPane 在中心。 ScrollPane 有两个逻辑部分 top 和 bottom。
当我创建一个显示BorderPane 的舞台时,我希望调整舞台的大小,以便仅显示ScrollPane 的top 部分,并且用户可以向下滚动以查看bottom 部分,如果他们需要它。
所以我尝试将ScrollPane 的prefHeight 属性绑定到top 部分的prefHeight 属性。希望ScrollPane 的高度合适,舞台看起来“恰到好处™”。由于某种原因,这惨遭失败。但是,当我将侦听器附加到 prefHeight 属性时,它确实返回了正确的高度。所以我对发生的事情感到惊讶。
有趣的是,如果我删除 BorderPane 它可以在 SSCCE 中使用,但在实际情况下这不是一个选项。
编辑:SSCCE 更新
这是一个 SSCCE:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class SSCCE extends Application {
@Override
public void start(Stage aStage) throws Exception {
VBox top = new VBox(new ComboBox<>(), new ComboBox<>(), new ComboBox<>());
top.setStyle("-fx-background-color: pink");
top.heightProperty().addListener((aObs, aOld, aNew)->{
System.out.println(aNew.doubleValue());
});
Region regionBottom = new Region();
regionBottom.setPrefHeight(100);
regionBottom.setPrefWidth(200);
regionBottom.setStyle("-fx-background-color: red");
VBox content = new VBox(top, regionBottom);
ScrollPane scrollPane = new ScrollPane(content);
scrollPane.setFitToWidth(true);
scrollPane.prefHeightProperty().bind(top.prefHeightProperty());
BorderPane root = new BorderPane(scrollPane);
root.setTop(new MenuBar(new Menu("Foo")));
Scene scene = new Scene(root);
aStage.setScene(scene);
aStage.sizeToScene();
aStage.show();
aStage.toFront();
}
public static void main(String[] args) {
launch();
}
}
实际结果:
预期结果:
【问题讨论】:
标签: java layout java-8 javafx-8