识别JavaFX选项卡

时间:2013-11-29 08:43:02

标签: tabs javafx

在我的JFX应用程序中,我创建了一个数组列表来跟踪选项卡。我主要是想知道哪些选项卡被用户关闭,以便我处理因删除特定选项卡而发生的更改。

我尝试使用下面的代码从数组列表中删除已关闭的选项卡。我使用setOnClosed方法来触发此代码:     String id = closedTab.getId();(第一次创建选项卡时会分配此ID,因此它不为空。)

for (Tab aTab : allTabsList) {
    if (aTab.getId().equals(id)) {
        allTabsList.remove(aTab);
        break;
    }
} 

我在getId方法上得到一个空指针异常。不知道为什么。

所以我试着这样做,哪种作品:

for (Tab aTab : allTabsList) {
    if (aTab.equals(closedTab)) {
        allTabsList.remove(closedTab);
        if allTabsList.contains(closedTab){
            System.out.println("tab is still there");
        }
    }
}

删除之后,我检查了arrayList是否包含此选项卡,并且代码不会进入if语句,因此它不应该使用它。但是,数组列表大小不会更改。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我其实喜欢更好的方法。这是:

设置如下:

  • 我创建了一个“MyTab”类来包装JavafX Tab对象。我认为包装它会给我一些容易嵌入字段的控件。 javaFX Tab变量的名称如下:fxTab。

  • fxTab从单独的FXML文件中获取其内容。在下面的代码中,内容/场景的根是“sceneRoot”。这样,我可以创建多个fxTab(我程序中的部分功能)。

  • 然后我为MyTab对象创建了一个ID变量,并通过fxTab.serUserData()将其传递给fxTab;

  • 然后我添加一个setOnClosed方法并使用该ID来识别fxTab已关闭,然后从arrayList(allMyTabs)中删除其包装器。当关闭fxTab时,我在我的arrayList中查找所有MyTab对象,并比较userData以识别我需要的对象。当然,ID变量总是递增的。因此,没有类似ID的标签。

        sceneRoot = (AnchorPane) loader.load();//load the tab scene root from the FXML loader
        Tab fxTab = new Tab();
        fxTab.setContent(sceneRoot);//add the tab scene root node to the tab
        fxTab.setClosable(true);//make the tab closable
    
        fxTab.setId(ID.toString());//set its ID.
    
        //add a close action to the created tab stage
        fxTab.setOnClosed(new EventHandler<Event>() {
            @Override
            public void handle(Event t) {
                Tab fxTab = (Tab) t.getSource();//get the source of the action...
    
                for (MyTab myTabObj: allMyTabs) {
                    if (myTabObj.ID.equals(fxTab.getUserData())) {
                        fxTab = myTabObj;//f so, this is the one
                        break;//break the loop
                    }
    
                }
                allMyTabs.remove(myTabObj);
                System.out.println("You closed Tab: " + fxTab.getUserData());
                System.out.println("Total number of remaining tabs is:" + allMyTabs.size());
            }
        });