Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用FXML在JavaFX中动态创建选项卡?_Java_Tabs_Javafx_Java 8_Fxml - Fatal编程技术网

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

如何使用FXML在JavaFX中动态创建选项卡?,java,tabs,javafx,java-8,fxml,Java,Tabs,Javafx,Java 8,Fxml,如何使用JavaFX/FXML创建新选项卡?我已经在FXML中创建了一个选项卡窗格,但我想单击一个按钮,使新选项卡出现 这是我的FXML: } 我不确定问题出在哪里,因为我已经浏览了大量资源,知道如何添加常规选项卡 我知道如果我做这样的标签: Tab fapTab = new Tab(); tabPane.getTabs().add(fapTab); 我可以这样添加: Tab fapTab = new Tab(); tabPane.getTabs().add(fapTab); 但我想动

如何使用JavaFX/FXML创建新选项卡?我已经在FXML中创建了一个选项卡窗格,但我想单击一个按钮,使新选项卡出现

这是我的FXML:

}

我不确定问题出在哪里,因为我已经浏览了大量资源,知道如何添加常规选项卡

我知道如果我做这样的标签:

Tab fapTab = new Tab();
tabPane.getTabs().add(fapTab);
我可以这样添加:

Tab fapTab = new Tab();
tabPane.getTabs().add(fapTab);
但我想动态创建它们,因为我不知道我的用户需要多少选项卡。因此,我的方法是创建一个选项卡数组,每当用户单击“新建”时,该数组就会变大,然后使用一个函数将新选项卡添加到gui中。但它不起作用,我尝试了几种不同的方法,使人们的代码适应我自己的代码

所以我的问题是,有人知道我做错了什么吗

以下是其中一些来源:

您已经给出了答案:只需创建一个新选项卡并将其添加到选项卡窗格:

Tab tab = new Tab();
tabPane.getTabs().add(tab);
完整示例:

AddTabsExample.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.control.Button?>

<BorderPane xmlns:fx="http://javafx.com/fxml/1"
    fx:controller="AddTabsController">
    <center>
        <TabPane fx:id="tabPane" />
    </center>
    <bottom>
        <HBox alignment="center">
            <Button text="Add tab" onAction="#addTab" />
            <Button text="List tabs" onAction="#listTabs" />
        </HBox>
    </bottom>
</BorderPane>
应用程序(AddTabsExample.java):


用这个代替。您必须重写
initialize()
方法:

@Override
public void initialize(URL location, ResourceBundle resources) {
    tabPane.getTabs().add(new Tab("Tab 1"));
} 
不是这个:

public void initialize() {
    tabPane.getTabs().add(new Tab("Tab 1"));
}

您建议的其他解决方案有什么问题,即
Tab newTab=new Tab()
tabPane.getTabs().add(newTab)?只需在事件处理程序中运行该代码。您不需要保留额外的选项卡列表(或数组),您可以始终使用
tabPane.getTabs()
获取当前列表。因为它创建了一个选项卡,并且只会为我创建的每个选项卡对象添加一个选项卡。我需要它是动态的,所以如果我的用户有大量的ram,并且想要打开200个选项卡,他们可以这样做,而不需要我硬编码。添加大量选项卡的UI是什么?他们在文本字段中输入要添加的号码,然后按下按钮?我不确定我是否理解你想要实现的目标,所以就按照你说的方式去做吧(就像我第一次评论的那样)。这将在每次调用事件处理程序时添加一个新选项卡。为什么不行?限制从哪里来?为什么要创建阵列?只需在事件处理程序中添加一个新选项卡:这就是它的全部内容。是的!太好了,谢谢!我不确定为什么一开始我做的不起作用,因为我很确定我尝试过类似的东西。但我不知道为什么它不起作用。无论如何,谢谢!我会将此标记为解决方案,但我认为我没有足够的代表。
@Override
public void initialize(URL location, ResourceBundle resources) {
    tabPane.getTabs().add(new Tab("Tab 1"));
} 
public void initialize() {
    tabPane.getTabs().add(new Tab("Tab 1"));
}