加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

javafx – 如何让TabPane填充其父级?

发布时间:2020-12-15 04:21:40 所属栏目:Java 来源:网络整理
导读:我的TabPane似乎只是水平填充它的宽度,而不是垂直填充.我现在的解决方法是这样做: stage.getScene().heightProperty().addListener(new ChangeListenerNumber() { @Override public void changed(ObservableValue? extends Number observable,Number oldVal
我的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();

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

标签设置:

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,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

解决方法

VBox.setVgrow(tabPane,Priority.ALWAYS);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读