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 流程更新。
在我的 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 流程更新。