JavaFX 8-选项卡和选项卡,每个选项卡具有单独的FXML和控制器

曼斯·托恩维克(MånsThörnvik)

我希望获得有关在Tabpane中的每个选项卡上使用fx:include语句的一些答案。我已经设法轻松地获取内容以显示关联的控制器类的BUT引用方法,无论我如何构造它,都只是给了我一个nullpointerreference异常。包含的FXML布局的控制器既没有构造函数又没有initialize()方法,是否需要它们?我尝试了一些不同的操作,但总是遇到相同的异常。

我所做的只是在选项卡窗格中添加了一个更改侦听器,当按下选项卡时,我想用从全局可访问数组列表中获取的一些值填充某些文本字段。注意:arraylist不是问题,使用主控制器执行此操作可以正常工作。

我将在短期内添加一个代码示例,但现在不能。如果您需要更多信息,请告诉我,否则我将在今天晚些时候发布代码。

*编辑,这是我的代码示例,摘自StackOverflow上的另一个线程。JavaFX TabPane-每个选项卡一个控制器

TestApp.java:

public class TestApp extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        Scene scene = new Scene(new StackPane());

        FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/MainTestWindow.fxml"));
        scene.setRoot(loader.load());
        MainTestController controller = loader.getController();
        controller.init();

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

主控制器,我要在其中引用子控制器。

public class MainTestController {

    @FXML private TabPane tabPane;
    // Inject tab content.
    @FXML private Tab fooTabPage;
    // Inject controller
    @FXML private FooTabController fooTabPageController;

    // Inject tab content.
    @FXML private Tab barTabPage;
    // Inject controller
    @FXML private BarTabController barTabPageController;

    public void init() {
        tabPane.getSelectionModel().selectedItemProperty().addListener((ObservableValue<? extends Tab> observable,
                                                                        Tab oldValue, Tab newValue) -> {
            if (newValue == barTabPage) {
                System.out.println("Bar Tab page");
                barTabPageController.handleButton();
            } else if (newValue == fooTabPage) {
                System.out.println("Foo Tab page");
                fooTabPageController.handleButton();
            }
        });
    }
}

主视图的.fxml

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

<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.Tab?>

<TabPane fx:id="tabPane" fx:controller="controller.MainTestController" xmlns="http://javafx.com/javafx/8.0.40"
         xmlns:fx="http://www.w3.org/2001/XInclude">
    <tabs>
        <Tab fx:id="fooTabPage" text="FooTab">
            <fx:include source="fooTabPage.fxml"/>
        </Tab>
        <Tab fx:id="barTabPage" text="BarTab">
            <fx:include source="barTabPage.fxml"/>
        </Tab>
    </tabs>
</TabPane>

FooTab:

public class FooTabController {
    @FXML private Label lblText;

    public void handleButton() {
        lblText.setText("Byebye!");
    }
}

FooTab的.fxml:

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

<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>

<?import javafx.scene.control.Button?>
<VBox xmlns:fx="http://www.w3.org/2001/XInclude" fx:controller="controller.FooTabController">
    <Label fx:id="lblText" text="Helllo"/>
    <Button fx:id="btnFooTab" onAction="#handleButton" text="Change text"/>
</VBox>

BarTab:

public class BarTabController {
    @FXML private Label lblText;

    public void handleButton() {
        lblText.setText("Byebye!");
    }
}

BarTab的.fxml

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

<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>

<?import javafx.scene.control.Button?>
<VBox xmlns:fx="http://www.w3.org/2001/XInclude" fx:controller="controller.BarTabController">
    <Label fx:id="lblText" text="Helllo" />
    <Button fx:id="btnBarTab" onAction="#handleButton" text="Change text"/>
</VBox>

FooTab和BarTab的上述onAction可以使用各自的按钮。当此方法(handleButton)是来自Main控制器的引用时,这就是我遇到异常的时候。

詹姆斯_D

要为包含的FMXL文件注入控制器,您需要fx:id<fx:include>元素上有一个属性该控制器将被注入到与现场"Controller"附加到fx:id值。

如果您也想注入实际值Tab,则需要单独fx:id输入。

所以:

<tabs>
    <Tab fx:id="fooTab" text="FooTab">
        <fx:include fx:id="fooTabPage" source="fooTabPage.fxml"/>
    </Tab>
    <Tab fx:id="barTab" text="BarTab">
        <fx:include fx:id="barTabPage" source="barTabPage.fxml"/>
    </Tab>
</tabs>

@FXML private TabPane tabPane;
// Inject tab content.
@FXML private Tab fooTab;
// Inject controller
@FXML private FooTabController fooTabPageController;

// Inject tab content.
@FXML private Tab barTab;
// Inject controller
@FXML private BarTabController barTabPageController;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaFX 8 TextArea松散地关注选项卡

来自分类Dev

JavaFX,在选项卡控制器之间传递参数

来自分类Dev

JavaFX-选项卡中的FXML

来自分类Dev

JavaFX TabPane-每个选项卡一个控制器

来自分类Dev

识别JavaFX选项卡

来自分类Dev

使用Eclipse和Scene Builder在Javafx 8中将数据从一个选项卡发送到另一个选项卡

来自分类Dev

将按钮添加到选项卡和选项卡区域JavaFX

来自分类Dev

JavaFX选项卡式窗格,每个选项卡上都有表格视图?

来自分类Dev

Javafx TabPane具有多行选项卡

来自分类Dev

在JavaFX上动态添加和填充选项卡

来自分类Dev

在另一个控制器中关闭选项卡 - JavaFX

来自分类Dev

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

来自分类Dev

UIStoryboard中的iOS 8自定义选项卡栏控制器

来自分类Dev

更改JavaFx选项卡的默认外观

来自分类Dev

更改JavaFx选项卡的默认外观

来自分类Dev

JavaFX Scene Builder定制选项卡

来自分类Dev

JavaFX 禁用选项卡导航

来自分类Dev

JavaFX ContextMenu加速器从错误的选项卡启动

来自分类Dev

JavaFX在单击时添加带有fxml的新选项卡

来自分类Dev

Javafx如何动态地向fxml文件中的现有选项卡添加内容

来自分类Dev

javafx的先前选项卡会影响最新的选项卡

来自分类Dev

Angular ui选项卡,每个选项卡带有单独的控制器

来自分类Dev

Python交互式解释器:初始选项卡为4,后续选项卡为8个空格

来自分类Dev

javafx在新选项卡中动态打开新的fxml文件

来自分类Dev

JAVAFX FXML:动态创建的选项卡中的动态 ImageView 不显示

来自分类Dev

通过可编辑单元格的JavaFX选项卡

来自分类Dev

JavaFx-SceneBuilder中的选项卡顺序

来自分类Dev

在tabpane javafx中创建垂直选项卡

来自分类Dev

JavaFX选项卡窗格未显示

Related 相关文章

  1. 1

    JavaFX 8 TextArea松散地关注选项卡

  2. 2

    JavaFX,在选项卡控制器之间传递参数

  3. 3

    JavaFX-选项卡中的FXML

  4. 4

    JavaFX TabPane-每个选项卡一个控制器

  5. 5

    识别JavaFX选项卡

  6. 6

    使用Eclipse和Scene Builder在Javafx 8中将数据从一个选项卡发送到另一个选项卡

  7. 7

    将按钮添加到选项卡和选项卡区域JavaFX

  8. 8

    JavaFX选项卡式窗格,每个选项卡上都有表格视图?

  9. 9

    Javafx TabPane具有多行选项卡

  10. 10

    在JavaFX上动态添加和填充选项卡

  11. 11

    在另一个控制器中关闭选项卡 - JavaFX

  12. 12

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

  13. 13

    UIStoryboard中的iOS 8自定义选项卡栏控制器

  14. 14

    更改JavaFx选项卡的默认外观

  15. 15

    更改JavaFx选项卡的默认外观

  16. 16

    JavaFX Scene Builder定制选项卡

  17. 17

    JavaFX 禁用选项卡导航

  18. 18

    JavaFX ContextMenu加速器从错误的选项卡启动

  19. 19

    JavaFX在单击时添加带有fxml的新选项卡

  20. 20

    Javafx如何动态地向fxml文件中的现有选项卡添加内容

  21. 21

    javafx的先前选项卡会影响最新的选项卡

  22. 22

    Angular ui选项卡,每个选项卡带有单独的控制器

  23. 23

    Python交互式解释器:初始选项卡为4,后续选项卡为8个空格

  24. 24

    javafx在新选项卡中动态打开新的fxml文件

  25. 25

    JAVAFX FXML:动态创建的选项卡中的动态 ImageView 不显示

  26. 26

    通过可编辑单元格的JavaFX选项卡

  27. 27

    JavaFx-SceneBuilder中的选项卡顺序

  28. 28

    在tabpane javafx中创建垂直选项卡

  29. 29

    JavaFX选项卡窗格未显示

热门标签

归档