JavaFX TabPane宽度和Button宽度不匹配

问题描述 投票:2回答:1

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

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

以下是此特定图像的代码I:

package stackOverflow;

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行(第二个注释所在的位置)设置完全相同的宽度这将导致显示的图像。

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

button javafx tabs width pane
1个回答
2
投票

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

screenshot1

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

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

虽然如下所示,它不是完全匹配,可能还有其他CSS属性需要考虑。希望这能让你更接近你的目标:

screenshot2

© www.soinside.com 2019 - 2024. All rights reserved.