RxJavaSwing + MVVM 纵向横向视图

RxJavaSwing + MVVM with Portrait Landscape Views

在我的 Java 桌面项目中使用 [RxJavaSwing] https://github.com/akarnokd/RxJavaSwing,

[RxJava3] https://github.com/ReactiveX/RxJava, following MVVM architecture given by Petikoch examples https://github.com/Petikoch/Java_MVVM_with_Swing_and_RxJava_Examples 能够轻松实现基于套接字编程的应用程序。

现在我想为横向和纵向模式实现这个。有没有办法像下图那样实现这个。如果是这样,

1) 如何将 2 个不同的视图实例传递给 ViewModel(当方向改变时动态传递)。

2) 我还将视图对象传递给 UsecaseImpl 以进行面板替换。这里我现在也需要传递2个不同的观点。

提前致谢。

代码:

View view = new View();
UsecaseImpl useCaseImpl = new UseCaseImpl(view, defaultValues);
ViewModel viewModel = new ViewModel();
Model model = new Model(useCaseImpl);
viewModel.connectTo(model);        
view.bind(viewModel);    <br>

还有如何根据来自 UsecaseImpl 的事件在 MVVM 中实现以下代码(目前它在 Util 中对所有视图都是通用的)

public static void switchChildPanel(JPanel jPanelParent, JPanel jPanelChild) {
    if(jPanelChild.isShowing()) {
        return;
    }
    jPanelParent.removeAll();
    jPanelParent.add(jPanelChild);
    jPanelParent.repaint();
    jPanelParent.invalidate();
    jPanelChild.setVisible(true);
} 

我能够通过创建和传递 2 个视图并将它们与 ViewModel 绑定来解决这个问题。只有视图是不同的实例,其余的都是相同的。

PortraitView portraitView = new PortraitView();
LandscapeView landscapeView = new LandscapeView();
UsecaseImpl useCaseImpl = new UseCaseImpl(portraitView, landscapeView, defaultValues);
ViewModel viewModel = new ViewModel();
Model model = new Model(useCaseImpl);
viewModel.connectTo(model);        
portairView.bind(viewModel);
landscapeView.bind(viewModel);

switchChildPanel(JPanel jPanelParent, JPanel jPanelChild) 现在我可以在与 usecaseImpl 的视图相关的 Util 中访问这段代码。所以它保持原样,没有任何变化。 UI 组件的其余部分根据 MVVM 流程更新。