Javafx TabPane具有多行选项卡

科尼弗洛斯(Kornephoros)

我想使用(JavaFX)TabPane来显示20个不同选项卡的内容。这对于标准的TabPane可以正常工作,但是,当窗格中有一定数量的选项卡时,可以单击按钮/ ComboBox来单击未显示的选项卡之一。

我正在设计将在触摸屏上使用的功能,因此这不是理想的选择。我认为拥有两排独立的标签会更直观。

如何将两行选项卡添加到TabPane中,或者可以做些什么来达到类似的效果?提前致谢。

这是一些示例代码,可以重现我的意思:

public class TabTest extends Application {


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

@Override
public void start(Stage primaryStage) throws Exception {
    primaryStage.setTitle("Tabs Test");
    Group root = new Group();
    Scene scene = new Scene(root, 450, 250, Color.WHITE);

    TabPane tabPane = new TabPane();
    BorderPane borderPane = new BorderPane();

    for( int i = 0; i < 20; i++)
    {
        Tab tab = new Tab();
        tab.setText("Tab " + i);
        HBox hbox = new HBox();
        hbox.getChildren().add(new Label("Tab " + i));
        tab.setContent(hbox);
        tabPane.getTabs().add(tab);
    }

    borderPane.prefHeightProperty().bind(scene.heightProperty());
    borderPane.prefWidthProperty().bind(scene.widthProperty());

    borderPane.setCenter(tabPane);
    root.getChildren().add(borderPane);
    primaryStage.setScene(scene);
    primaryStage.show();
}

链接到选项卡式视图,因为我还不能发布图像

DVarga

选项卡标题区域TabPane基本上是一个StackPane,因此我认为创建两行选项卡而不是一列并不是那么容易。

我的想法是隐藏您的原始标签,TabPane然后将一组ToggleButton对象放在中,ToggleGroup然后将选择的切换与标签的选择绑定在一起。

这样,您可以将“制表符”添加到所需的任何容器(流,网格等)中。

真正最少的样本:

Main.java

public class Main extends Application {

    TabPane tabPane;
    private ToggleGroup toggleGroup;

    @Override
    public void start(Stage primaryStage) {

        Group root = new Group();
        Scene scene = new Scene(root, 700, 400, Color.WHITE);

        primaryStage.setTitle("Tabs Test");

        toggleGroup = new ToggleGroup();
        toggleGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {

            @Override
            public void changed(ObservableValue<? extends Toggle> observable, Toggle oldValue, Toggle newValue) {
                if (newValue == null)
                    toggleGroup.selectToggle(oldValue);
                else
                    tabPane.getSelectionModel().select((Tab) newValue.getUserData());
            }
        });

        tabPane = new TabPane();
        tabPane.getStylesheets().add(getClass().getResource("application.css").toExternalForm());

        VBox vboxToggleOuterContainer = new VBox();
        HBox hboxToggleFirstRow = new HBox();
        HBox hboxToggleSecondRow = new HBox();

        vboxToggleOuterContainer.getChildren().addAll(hboxToggleFirstRow, hboxToggleSecondRow);

        for (int i = 0; i < 20; i++) {
            Tab tab = new Tab();
            tab.setText("Tab " + i);
            HBox hbox = new HBox();
            hbox.getChildren().add(new Label("Tab " + i));
            tab.setContent(hbox);
            tabPane.getTabs().add(tab);

            ToggleButton tb = new ToggleButton("Tab" + i);
            tb.setToggleGroup(toggleGroup);
            tb.setUserData(tab);

            if (i < 10)
                hboxToggleFirstRow.getChildren().add(tb);
            else
                hboxToggleSecondRow.getChildren().add(tb);
        }

        toggleGroup.selectToggle(toggleGroup.getToggles().get(0));

        VBox vbox = new VBox();
        vbox.getChildren().addAll(vboxToggleOuterContainer, tabPane);
        vbox.fillWidthProperty().set(true);
        root.getChildren().add(vbox);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

application.css

.tab-pane {
    -fx-skin: "com.sun.javafx.scene.control.skin.TabPaneSkin";
    -fx-tab-min-height: 0;  
    -fx-tab-max-height: 0; 
}

.tab-pane .tab-header-area {
    -fx-padding: 0 0 0 0; 
}

.tab-pane .tab-header-area .headers-region .tab {

    -fx-padding: 0 0 1 0;
}

该示例实际上是最小的,仅显示了方法,您可以改进CSS以使控件更加精美(或者,如果我愿意的话,也可以对其进行更新)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在关闭 JAVAFX 时检查 TabPane 中是否没有选项卡

来自分类Dev

在tabpane javafx中创建垂直选项卡

来自分类Dev

JavaFX 8-选项卡和选项卡,每个选项卡具有单独的FXML和控制器

来自分类Dev

JavaFX-TabPane / Tab如何添加填充选项卡大小的内容?

来自分类Dev

JavaFX TabPane切换选项卡仅在关注时

来自分类Dev

JavaFX TabPane-每个选项卡一个控制器

来自分类Dev

JavaFx TabPane 每个选项卡一个视图,但数据不同

来自分类Dev

识别JavaFX选项卡

来自分类Dev

JavaFx TabPane:想要一个控制器用于 2 个或更多选项卡

来自分类Dev

JavaFX选项卡式窗格,每个选项卡上都有表格视图?

来自分类Dev

更改JavaFx选项卡的默认外观

来自分类Dev

JavaFX-选项卡中的FXML

来自分类Dev

更改JavaFx选项卡的默认外观

来自分类Dev

JavaFX Scene Builder定制选项卡

来自分类Dev

JavaFX 禁用选项卡导航

来自分类Dev

JavaFX:如何在不使用5x的情况下使用SceneBuilder在TabPane中创建5个相同的选项卡?

来自分类Dev

JavaFX在单击时添加带有fxml的新选项卡

来自分类Dev

Javafx如何动态地向fxml文件中的现有选项卡添加内容

来自分类Dev

将按钮添加到选项卡和选项卡区域JavaFX

来自分类Dev

javafx的先前选项卡会影响最新的选项卡

来自分类Dev

通过可编辑单元格的JavaFX选项卡

来自分类Dev

JavaFX ContextMenu加速器从错误的选项卡启动

来自分类Dev

JavaFx-SceneBuilder中的选项卡顺序

来自分类Dev

如何使用FXML在JavaFX中动态创建选项卡?

来自分类Dev

JavaFX 8 TextArea松散地关注选项卡

来自分类Dev

JavaFX,在选项卡控制器之间传递参数

来自分类Dev

在JavaFX上动态添加和填充选项卡

来自分类Dev

JavaFX选项卡窗格未显示

来自分类Dev

获取附加到javafx选项卡的对象

Related 相关文章

  1. 1

    在关闭 JAVAFX 时检查 TabPane 中是否没有选项卡

  2. 2

    在tabpane javafx中创建垂直选项卡

  3. 3

    JavaFX 8-选项卡和选项卡,每个选项卡具有单独的FXML和控制器

  4. 4

    JavaFX-TabPane / Tab如何添加填充选项卡大小的内容?

  5. 5

    JavaFX TabPane切换选项卡仅在关注时

  6. 6

    JavaFX TabPane-每个选项卡一个控制器

  7. 7

    JavaFx TabPane 每个选项卡一个视图,但数据不同

  8. 8

    识别JavaFX选项卡

  9. 9

    JavaFx TabPane:想要一个控制器用于 2 个或更多选项卡

  10. 10

    JavaFX选项卡式窗格,每个选项卡上都有表格视图?

  11. 11

    更改JavaFx选项卡的默认外观

  12. 12

    JavaFX-选项卡中的FXML

  13. 13

    更改JavaFx选项卡的默认外观

  14. 14

    JavaFX Scene Builder定制选项卡

  15. 15

    JavaFX 禁用选项卡导航

  16. 16

    JavaFX:如何在不使用5x的情况下使用SceneBuilder在TabPane中创建5个相同的选项卡?

  17. 17

    JavaFX在单击时添加带有fxml的新选项卡

  18. 18

    Javafx如何动态地向fxml文件中的现有选项卡添加内容

  19. 19

    将按钮添加到选项卡和选项卡区域JavaFX

  20. 20

    javafx的先前选项卡会影响最新的选项卡

  21. 21

    通过可编辑单元格的JavaFX选项卡

  22. 22

    JavaFX ContextMenu加速器从错误的选项卡启动

  23. 23

    JavaFx-SceneBuilder中的选项卡顺序

  24. 24

    如何使用FXML在JavaFX中动态创建选项卡?

  25. 25

    JavaFX 8 TextArea松散地关注选项卡

  26. 26

    JavaFX,在选项卡控制器之间传递参数

  27. 27

    在JavaFX上动态添加和填充选项卡

  28. 28

    JavaFX选项卡窗格未显示

  29. 29

    获取附加到javafx选项卡的对象

热门标签

归档