在JavaFX中,有没有办法先显示选项卡名称,然后再显示图形?

In JavaFX, is there a way to display Tab name first and then graphic?

我在 JavaFX 应用程序中有一个 TabPane。我必须编写一个侦听器来关闭选项卡,因此我从选项卡中删除了默认的关闭图标并添加了我的自定义关闭图标。下面是代码:

Tab gTab = new Tab("GlobalData.json");
Hyperlink hlink = new Hyperlink();
Image image = new Image(FileTreeItem.class.getResourceAsStream("../images/close.png"));
hlink.setGraphic(new ImageView(image));
hlink.setFocusTraversable(false);
gTab.setGraphic(hlink);
hlink.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        if (TabPaneUtil.getInstance().getSelectionModel().getSelectedItem().getText().endsWith("*")) {
            Response res = FXOptionPane.showConfirmDialog(new Main().getPrimaryStage(), "Would you like to save?", "Confirmation");
            if (res.equals(Response.YES))
                event.consume();
            else
                TabPaneUtil.getInstance().getTabs().remove(TabPaneUtil.getInstance().getSelectionModel().getSelectedItem());
        } else {
            TabPaneUtil.getInstance().getTabs().remove(TabPaneUtil.getInstance().getSelectionModel().getSelectedItem());
        }
    }
});
gTab.setContent(main1.globalDataView(ApplicationContext.getTreeView().getSelectionModel().getSelectedItem()));
TabPaneUtil.getInstance().getTabs().add(gTab);
TabPaneUtil.getInstance().getSelectionModel().select(gTab);

发生的事情是我首先获得关闭图标,然后获得选项卡名称。有什么方法可以先获取选项卡名称,然后再获取图形?

P.S: 我见过一些解决方案,比如在 Label 中添加文本和旋转图形。我不可能那样做,因为我将不得不在我的应用程序中做很多代码更改,而且它会变得很乱!任何帮助将不胜感激。

您可以使用外部 CSS 文件执行此操作:只需包含规则

.tab-label {
    -fx-content-display: right ;
}

如果需要,您可以使用

将其仅应用于特定的选项卡窗格
.my-special-tab-pane .tab-label {
    -fx-content-display: right ;
}

someTabPane.getStyleClass().add("my-special-tab-pane");

我迟到了 5 年,但有两个适用于 JavaFX 的解决方案:

第一个是:

hlink.setContentDisplay(ContentDisplay.RIGHT);

至少,JavaFX 8(或更高版本)可以正常工作。

另一方面,我看到您正试图放置一个关闭按钮,但 JavaFX 已经实现了它(至少在 JavaFX 8 上)。您应该删除超链接和图像,然后像这样制作您的标签 closable, and set a tab closing policy

//Set a closing policy:
someMethodToGetTabPane().setTabClosingPolicy(TabPane.TabClosingPolicy.ALL_TABS);

//... some other code

//Set a tab closable (can be omitted, since default value is true):
gTab.setClosable(true);

//Listen when someone requests closing the tab:
gTab.setOnCloseRequest(this::someMethodReference);

//Listen when the tab has been closed:
gTab.setOnClosed(this::doSomething);

//more code...