那么这不是一个简洁的解决方案,它更像是一种解决方法.由于tabpane的子结构由stackpanes组成,因此默认情况下这些stackpanes对齐到center.但是标签没有与中心对齐,这意味着皮肤代码中存在自定义布局.在阅读tabpane皮肤代码后,可以找到正确的解决方案.
Platform.runLater(new Runnable() {
@Override
public void run() {
final StackPane region = (StackPane) tabPane.lookup(".headers-region");
final StackPane regionTop = (StackPane) tabPane.lookup(".tab-pane:top *.tab-header-area");
regionTop.widthProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue extends Number> arg0, Number arg1, Number arg2) {
Insets in = regionTop.getPadding();
regionTop.setPadding(new Insets(
in.getTop(),
in.getRight(),
in.getBottom(),
arg2.doubleValue() / 2 - region.getWidth() / 2));
}
});
// force re-layout so the tabs aligned to center at initial state
stage.setWidth(stage.getWidth() + 1);
}
});