当前位置: 首页 > 知识库问答 >
问题:

JavaFX TabPane-每个tab有一个控制器

吕英才
2023-03-14

我刚接触外汇。我有一个有10个标签的标签面板。每个选项卡都有许多控件(图表、按钮等),我想要的是为每个选项卡分配一个控制器。SceneBuilder只允许我为整个视图分配一个控制器,我的意思是,只有顶部面板(根)有“控制器类”选项,所以我必须为一个类中的所有选项卡编写代码,这导致了一个非常大的类,很难理解和维护。也许解决方案很简单,但正如我所说,我对FX的经验很少,我也无法在网上找到类似的东西。

共有1个答案

百里修真
2023-03-14

一种方法是将每个选项卡页封装到一个单独的FXML文件中,并使用它自己的关联控制器类。

然后,在主选项卡控件的FXML文件中,可以执行如下操作:

<TabPane fx:controller="com.foo.MainController">
    <tabs>
        <Tab text="Untitled Tab 1">
            <content>
                <fx:include fx:id="fooTabPage" source="fooTabPage.fxml"/>
            </content>
        </Tab>
        <Tab text="Untitled Tab 2">
            <content>
                <fx:include fx:id="barTabPage" source="barTabPage.fxml"/>
            </content>
        </Tab>
    </tabs>
</TabPane>

请注意,我没有直接嵌入内容,而是使用fx:include指令,它告诉fxmlloader加载被引用的FXML文件。用于页面内容的各个FXML文件都有自己的控制器,这样逻辑就很好地分开了。

public class MainController {
    // Inject tab content.
    @FXML private FooTabPage fooTabPage;
    // Inject controller
    @FXML private FooTabController fooTabPageController;

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

您需要侦听选项卡的更改来切换内容,并添加相关代码来加载/卸载用于选项卡页面内容的视图。

我建议从第一种方法开始,如果发现性能问题,则重构使用第二种方法。

 类似资料:
  • 我有一个我想给他2个或更多的背景图像。我用两个图像为类设置了一个样式: 我的问题是设置不同的背景大小为每个图像URL。我如何控制每个图像的许多背景图像在一个DIV设置大小,边框,颜色...? 编辑:我想控制每个图像的大小在DIV里面,例如第一个图像的背景应该是20px20px,第二个图像应该是40px45px等等。

  • 第一个控制器 The Controllers layer is responsible for handling incoming HTTP requests. In Nest, Controller is a simple class with @Controller() decorator. 控制层负责处理传入的HTTP请求。在Nest中,控制器是一个带有@Controller()装饰器的类。

  • 需要你的帮助!这可能是更多的设计角度,但我在我的应用程序中使用这个模式,所以想得到一个想法。 我的问题是直接或间接地从一个控制器访问另一个控制器。是否有任何优雅的设计方法来做到这一点,而不是在另一个控制器中保留一个控制器的引用。 提前致谢

  • 我有两个控制器和。我正在读一本书的内容。来自的txt文件,我希望将该文本放置在的文本区域中。代码在中运行并读取良好,但当打开中的窗口时,从中读取的内容。文本内容在文本区域中不可见。我的显示String mine包含内容,但它不显示在的文本区域中。请帮助任何人。非常感谢。 FXMLDocumentController代码 在中,有一个我删除了和,这样代码就可以工作了。

  • 问题内容: 我想从另一个控制器的函数中加载一个控制器,因为我集成到项目中的库我不想将其加载到控制器中,因为我想保持它的清洁和相关性。 我有默认的控制器,所以我可以加载,这样我怎么能从main函数访问控制器,所以我不必将控制器放在url中。 如果我可以从主控制器功能中加载控制器功能,我仍然愿意使用HMVC。 问题答案: 您无法从CI中的控制器加载控制器-除非您使用HMVC或其他工具。 您应该考虑一下

  • 问题内容: 我是Angular的新手,正在尝试弄清楚该怎么做… 使用AngularJS,如何注入要在另一个控制器中使用的控制器? 我有以下片段: 执行此操作时,出现错误: 我是否应该尝试在另一个控制器内部使用一个控制器,还是应该将此服务用作服务? 问题答案: 如果您打算掌握已经实例化的另一个组件的控制器,并且如果您遵循的是基于组件/指令的方法,则始终可以遵循某个层次结构的另一个组件中的控制器(一个