在JavaFX中,有没有办法首先显示Tab名称然后显示图形?

时间:2015-05-29 09:21:51

标签: java javafx

我在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和旋转图形中添加文本。我不太可能这样做,因为我将不得不在我的应用程序中进行大量代码更改并且它变得非常混乱!任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

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

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

如果需要,您只能将其应用于具有

的特定选项卡窗格
.my-special-tab-pane .tab-label {
    -fx-content-display: right ;
}

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

答案 1 :(得分:0)

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

第一个是:

hlink.setContentDisplay(ContentDisplay.RIGHT);

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

另一方面,我看到您正在尝试放置一个关闭按钮,但 JavaFX 已经实现了它(至少在 JavaFX 8 上)。您应该删除超链接和图像,而是让您的标签closable,并像这样设置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...