如何使用 javafx weaver 动态更改控制器的视图

How can I change view for controller dynamically using javafx weaver

我有以下项目结构:

DashboarMainController:

@Component
@FxmlView("/view/normal/dashboard-main.fxml")
public class DashboardMainController implements Initializable {

    ...some logic
}

@FxmlView 只能附加一次并且只接受一个 String

程序应具有三种可能的屏幕分辨率(小、正常、大)以在程序中动态更改。所以我想对同一个控制器使用不同的预定义视图来管理。

据推测,您实际上想要在不同视图中显示不同节点和控件的非常不同的布局,否则,您可以只使用 layout panes 中的标准 JavaFX 大小调整提示来实现您想要的。所以这是这个答案所做的假设。

我对“javafx weaver”一无所知,但也许可以将 DashboardMainController 抽象化,然后为不同的视图定义三个子类,并将您的 @FXMLView 注释放在它们上面。

您在执行此操作时必须小心,因为您现在将拥有三个控制器实例,每个都链接到不同的节点。然而,这可能正是您想要的。

在 JavaFX 中,控制器与视图紧密相关,因为 FXMLLoader 将为视图实例化节点层次结构并将其插入到控制器中。因此每个控制器实例及其关联节点将映射到同一底层模型数据的不同视图。

要使所有内容保持同步,您需要将模型与 views/view-models 分开。有关如何执行此操作的概述,这是相对高级的(例如,不是新手级别),请参见: