如何让TabPane填充其父级?

时间:2014-08-06 15:18:07

标签: 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());
      }
    });

但是,如果我使用那个高度,它明显大于实际剩余的区域(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();

当然还有一些代码,但它只包含拖动相关的监听器,这个问题在任何人做过任何事情之前都会发生(他们每​​次做某事时都会打印到控制台)。 / p>

标签设置:

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);

来自How to drag and drop tab nodes between tab panes

1 个答案:

答案 0 :(得分:7)

VBox.setVgrow(tabPane, Priority.ALWAYS);