JavaFX:拉伸选项卡以适合父TabPane

时间:2018-01-18 18:48:46

标签: java javafx javafx-8 javafx-2

我正在使用以下代码使TabPane的组合标签宽度适合 TabPane的宽度。

private void initTabPane() {

    // Populate Tabs
    List<Tab> tabs = _tabPane.getTabs();
    tabs.add(new Tab("Metadator", _metadatorView));
    tabs.add(new Tab("Translator", _translatorView));
    tabs.add(new Tab("ESPN"));

    // Stretch to fit width 
    _tabPane.tabMinWidthProperty().bind(_tabPane.widthProperty()
                                                .divide(_tabPane.getTabs().size())                                                   );
}

我一直试图删除当标签达到相对于TabPane宽度的特定宽度时显示的标签向下按钮视图。您可以在下方图片的右上角看到:

enter image description here

我尝试使用其类.control-buttons-tab, .container, .tab-down-button, .arrow的填充/ margin / bg-color属性,但没有任何效果。

  

是否有任何方法可以将其删除,或者将其偏移到远离干扰的最后一个标签?

1 个答案:

答案 0 :(得分:1)

这是正确的轨道,但你必须改变一些。您基本上需要将Tabs'宽度设置为一定长度。然后,您需要将TabPane's宽度设置为一起添加的所有Tabs的长度。最后,添加一个缓冲区,以便下拉列表不显示。 - &GT;请参阅代码中的+55

import java.util.List;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Main extends Application
{

    public static void main(String[] args)
    {
        Application.launch(args);
    }

    @Override
    public void start(Stage primaryStage)
    {
        primaryStage.setTitle("Tabs");
        Group root = new Group();

        TabPane tabPane = new TabPane();

        BorderPane borderPane = new BorderPane();
        List<Tab> tabs = tabPane.getTabs();
        tabs.add(new Tab("Metadator"));
        tabs.add(new Tab("Translator"));
        tabs.add(new Tab("ESPN"));

        tabPane.tabMinWidthProperty().set(100);//set the tabPane's tabs min and max widths to be the same.
        tabPane.tabMaxWidthProperty().set(100);//set the tabPane's tabs min and max widths to be the same.
        System.out.println(tabPane.tabMinWidthProperty().get());
        tabPane.setMinWidth((100 * tabPane.getTabs().size()) + 55);//set the tabPane's minWidth and maybe max width to the tabs combined width + a padding value
        tabPane.setPrefWidth((100 * tabPane.getTabs().size()) + 55);//set the tabPane's minWidth and maybe max width to the tabs combined width + a padding value
        borderPane.setCenter(tabPane);
        root.getChildren().add(borderPane);

        Scene scene = new Scene(root, (100 * tabPane.getTabs().size()) + 55, 250, Color.WHITE);//You might need to set the scene's with also
        primaryStage.setScene(scene);
        primaryStage.show();
    }

}

enter image description here