我的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)
| 归档时间: |
|
| 查看次数: |
6321 次 |
| 最近记录: |