Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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
Java 动态地将FXML中定义的AnchorPane添加到选项卡,并在以后访问此窗格内容_Java_Javafx_Fxml - Fatal编程技术网

Java 动态地将FXML中定义的AnchorPane添加到选项卡,并在以后访问此窗格内容

Java 动态地将FXML中定义的AnchorPane添加到选项卡,并在以后访问此窗格内容,java,javafx,fxml,Java,Javafx,Fxml,我想将TableView动态添加到选项卡中。现在我想访问控制器。我不知道怎么做。以下是代码: sample.fxml代码: <GridPane fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10"> <TabPane fx:id="tabPane"> </TabPane> &

我想将
TableView
动态添加到选项卡中。现在我想访问控制器。我不知道怎么做。以下是代码:

sample.fxml代码:

<GridPane fx:controller="sample.Controller"
      xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
    <TabPane fx:id="tabPane">
    </TabPane>
</GridPane>
FXMLTableView.fxml代码:

<AnchorPane xmlns="http://javafx.com/javafx"
        xmlns:fx="http://javafx.com/fxml"
        fx:controller="sample.ControllerFXMLTableView"
        prefHeight="400.0" prefWidth="600.0">

    <TableView>
        <columns>
            <TableColumn fx:id="columnName" text="name"/>
            <TableColumn text="surname"/>
        </columns>
    </TableView>
</AnchorPane>
在Main.java中,我有以下代码:

public class Main extends Application {

    @Override
    public void start(Stage stage) throws Exception {

        FXMLLoader loaderSample = new FXMLLoader(getClass().getResource("sample.fxml"));
        Parent root = loaderSample.load();

        Controller controller = loaderSample.getController();

        TabPane tabPane = controller.getTabPane();

        List<String> listMonths = List.of("January", "February", "March", "April");

        listMonths.forEach(itemList -> {
            try {
                Tab tabTemp = new Tab(itemList.toString());
                AnchorPane anchorPane = FXMLLoader.load(getClass().getResource("FXMLTableView.fxml"));
                tabTemp.setContent(anchorPane);
                tabPane.getTabs().add(tabTemp);
            } catch(Exception ex){}
        });


        stage.setTitle("Hello World");
        stage.setScene(new Scene(root, 300, 275));
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
public类主扩展应用程序{
@凌驾
public void start(Stage)引发异常{
FXMLLoader loaderSample=新的FXMLLoader(getClass().getResource(“sample.fxml”);
父根=loaderSample.load();
控制器控制器=loaderSample.getController();
TabPane TabPane=controller.getTabPane();
列表月份=列表月份(“一月”、“二月”、“三月”、“四月”);
listMonths.forEach(项目列表->{
试一试{
Tab tabTemp=新选项卡(itemList.toString());
AnchorPane AnchorPane=FXMLLoader.load(getClass().getResource(“FXMLTableView.fxml”);
tabTemp.setContent(锚烷);
tabPane.getTabs().add(tabTemp);
}捕获(例外情况除外){}
});
舞台。片名(“你好世界”);
舞台场景(新场景(根,300275));
stage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}
我不确定这是我应该做的正确方式。我想知道可接受的污染程度。现在我想访问标有
fx:id=“columnName”
的列。如何访问每个选项卡的
ControllerFXMLTableView

12个月的时间不足以在fxml中编写代码(动态代码也没有问题),但这只需要一个循环

如何为每个选项卡访问ControllerFXMLTableView

只需在
forEach
循环中执行即可:

 FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLTableView.fxml"));
 AnchorPane anchorPane = loader.load();
 ControllerFXMLTableView tabController = loader.getController();
 TableColumn column = tabController.getColumnName();
编辑:为了便于以后使用,您可以定义一个适当的容器,a
Map columns=new HashMap()例如,并使用它:

columns.put(itemList,tabController.getColumnName())

我在每个选项卡上都有这个
安可芬
,我应该保留那些控制器的列表还是什么?我的意图是,我只是在标签上添加了那些
AnchorPane
。现在我唯一拥有的是
选项卡窗格
,从这个窗格我得到选项卡,然后我更改(例如)列的名称。我想在离开循环后访问控制器。你可以将引用存储在
列表
映射
中。我认为有比存储引用更好的解决方案。
public class Main extends Application {

    @Override
    public void start(Stage stage) throws Exception {

        FXMLLoader loaderSample = new FXMLLoader(getClass().getResource("sample.fxml"));
        Parent root = loaderSample.load();

        Controller controller = loaderSample.getController();

        TabPane tabPane = controller.getTabPane();

        List<String> listMonths = List.of("January", "February", "March", "April");

        listMonths.forEach(itemList -> {
            try {
                Tab tabTemp = new Tab(itemList.toString());
                AnchorPane anchorPane = FXMLLoader.load(getClass().getResource("FXMLTableView.fxml"));
                tabTemp.setContent(anchorPane);
                tabPane.getTabs().add(tabTemp);
            } catch(Exception ex){}
        });


        stage.setTitle("Hello World");
        stage.setScene(new Scene(root, 300, 275));
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
 FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLTableView.fxml"));
 AnchorPane anchorPane = loader.load();
 ControllerFXMLTableView tabController = loader.getController();
 TableColumn column = tabController.getColumnName();