JavaFX TabPane 宽度和 Button 宽度不匹配

JavaFX TabPane width and Button width don´t match

当我尝试在 JavaFX 中使用 TabPane 容器时,我注意到,如果我给 TabPane 中的 Tabs 一个特定的宽度和另一个元素,例如Button 完全相同的宽度,它们以不同的尺寸显示在屏幕上。

这是一个例子:As you can see in this image, the Button is smaller than the width of the tap

这是此特定图像的代码 I:

package Whosebug;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TabPane.TabClosingPolicy;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class TabPaneMystery extends Application {

public static void main(String[] args){

    launch(args);

}

@Override
public void start(Stage stage) throws Exception {

    StackPane stackPane = new StackPane();
    Scene scene = new Scene(stackPane, 600, 400);

    stage.setScene(scene);
    stage.show();

    TabPane tabPane = new TabPane();
    stackPane.getChildren().add(tabPane);
    Tab tab1 = new Tab();

    tabPane.setTabMaxWidth(160);        //The width of the tab is '160'
    tabPane.setTabMinWidth(160);
    tabPane.setTabClosingPolicy(TabClosingPolicy.UNAVAILABLE);

    tab1.setText("Tab");
    tabPane.getTabs().add(tab1);

    Button b = new Button();
    b.setText("Button");
    b.setPrefWidth(160);                //The width of the button is '160'
    b.setTranslateX(6);

    tab1.setContent(b);

}

}

在第 33 行和第 34 行 (第一条评论所在的位置) 我将 tapPane 的宽度设置为 160,在第 42 行 (第二条评论在哪里) 我设置的宽度完全一样 这导致显示的图像。

我的问题是:
我犯了一个明显的错误还是某种错误,或者编译器对每个节点的宽度的解释是否有所不同?

我怀疑您在 Tab 中看到了一些填充。 Tab 的实际宽度为 170。您可以通过将 Tab 的宽度更改为 150 来确认这一点;然后它将与 Button:

的大小完全相同

您也可以使用 CSS 删除填充:

tab1.setStyle("-fx-padding: 0");

不过,正如您在下面看到的那样,它不是完全匹配的,可能还有其他 CSS 属性需要研究。不过,希望这能让您更接近您的目标: