rxjavaswing+mvvm,具有纵向和横向视图

flvtvl50  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(537)

在我的java桌面项目中使用,[rxjavaswing]https://github.com/akarnokd/rxjavaswing,
[rxjava3版本]https://github.com/reactivex/rxjava,遵循petikoch给出的mvvm架构示例https://github.com/petikoch/java_mvvm_with_swing_and_rxjava_examples 能够轻松实现基于socket编程的应用程序。
现在我想为横向和纵向模式实现这个。有没有一种方法来实现这个类似下图的东西。如果是的话,
1) 如何将两个不同的视图示例传递到viewmodel(当方向更改时动态传递)。
2) 我还将视图对象传递给usecaseimpl以进行面板替换。这里我也需要通过两个不同的观点了。
提前谢谢。

代码:

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>

另外,如何基于usecaseinpl中的事件在mvvm中实现下面的代码(目前所有视图都使用util common)

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

dfty9e191#

我可以通过创建和传递两个视图并用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)` 现在,我可以在util中从usecaseinpl访问与其视图相关的代码。所以它保持原样,没有任何变化。其余的ui组件将根据mvvm流进行更新。

相关问题