如何让TabPane填充其父级?

wlf*_*bck 3 javafx

我的TabPane似乎只是水平填充它的宽度,而不是垂直填充.我现在的解决方法是这样做:

    stage.getScene().heightProperty().addListener(new ChangeListener<Number>() {

      @Override
      public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        System.out.println("height changed");
        tabPane.setPrefHeight(newValue.doubleValue());
      }
    });
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用那个高度,它显然大于实际剩余的区域(TabPane上方的MenuBar).(或者它是否适当地调整它的大小?)它也有点感觉不对,我必须设置简单的布尔值,因为它的行为完全符合水平变化的预期.

场景设置如下:

public static ResourceBundle BUNDLE = ResourceBundle.getBundle("locales/Bundle", new Locale("en", "GB"));
Scene scene = new Scene(new VBox(0), 800, 600);
MenuBar menuBar = new MenuBar();
Menu menuStart = new Menu(BUNDLE.getString("menu.start"));
Menu menuView = new Menu(BUNDLE.getString("menu.view"));
Menu menuHelp = new Menu(BUNDLE.getString("menu.help"));
menuBar.getMenus().addAll(menuStart, menuView, menuHelp);

((VBox) stage.getScene().getRoot()).getChildren().add(menuBar);
TabPane tabPane = new TabPane();
((VBox) stage.getScene().getRoot()).getChildren().add(tabPane);
stage.setScene(scene);
stage.show();
Run Code Online (Sandbox Code Playgroud)

当然还有一些代码,但它只包含与拖拉相关的监听器,而且这个问题在它们之前做过任何事情之前就已经发生了(每次他们做某事时都会打印到控制台).

标签设置:

final Tab tab = new Tab();
final Label label = new Label("Tab" +text);
tab.setGraphic(label);
StackPane pane = new StackPane();
int red = rng.nextInt(256);
int green = rng.nextInt(256);
int blue = rng.nextInt(256);
String style = String.format("-fx-background-color: rgb(%d, %d, %d);", red, green, blue);
pane.setStyle(style);
Label label = new Label("This is tab " + text);
label.setStyle(String.format("-fx-text-fill: rgb(%d, %d, %d);", 256 - red, 256 - green, 256 - blue));
pane.setPrefSize(500, 500);
pane.getChildren().add(label);
tab.setContent(pane);
Run Code Online (Sandbox Code Playgroud)

哪个来自如何在选项卡窗格之间拖放选项卡节点

Tom*_*ula 7

VBox.setVgrow(tabPane, Priority.ALWAYS);